微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

R:将条件列值替换为剩余列值的随机样本

如何解决R:将条件列值替换为剩余列值的随机样本

我有一个数据集,我想用Alevel=="A"随机样本替换Alevel!="A"的75%。我首先找到Alevel=="A"数量,然后找到该数量的75%。

我用Alevel=="A"随机选择了ID的75%,但然后我不得不为这些随机采样的ID中的Alevel分配随机

首先,我知道DT[column=="X"][c(subset of dataset),column:="New Value"]语法是不正确的,但这也是我对data.table的了解导致的。我有两个问题

  1. 我如何整齐执行我的计划,使用更简洁,易于阅读且健壮的Alevel=="A"语法,用Alevel!="A"随机样本替换data.table的{​​{1}}中的75%可能的行数最少

  2. 供以后参考,当我先在一个数据集上放置一个条件,然后是一个子集时如何重新分配值(例如,在我尝试DT[column=="X"][c(subset of dataset),column:="New Value"]错误示例中)。我知道.SD会发挥作用,但我还不太了解它的使用方式

下面是我尝试用来执行计划的代码。它非常笨重,无法正常工作,我想将其压缩为更具可读性和鲁棒性的内容

library(data.table)
set.seed(1992)
DT <- data.table(ID=1:1000,Alevel=sample(LETTERS,1000,replace = TRUE))

DT[,table(Alevel)]
(count.ids.w.A <- nrow(DT[Alevel=="A"]))
(count.ids.w.A.to.replace <- round(count.ids.w.A*.75))
values <- DT[Alevel!="A",unique(Alevel)]
DT[Alevel=="A",][sample(count.ids.w.A,count.ids.w.A.to.replace),Alevel:=sample(values,count.ids.w.A.to.replace)]
DT[,table(Alevel)]

解决方法

这是一种应该健壮的方法。这将使用A的索引,选择其中的75%,然后将session.rollback()中的import numpy as np from sqlalchemy import Column,Integer from sqlalchemy.ext.declarative import declarative_base from sqlalchemy.ext.mutable import Mutable from sqlalchemy.types import PickleType Base = declarative_base() class MutableNumpy(Mutable,np.ndarray): @classmethod def coerce(cls,key,value): "Convert plain numpy arrays to MutableNumpy." if not isinstance(value,MutableNumpy): if isinstance(value,np.ndarray): mutable_array = MutableNumpy(shape=value.shape,dtype=value.dtype,buffer=value) return mutable_array # this call will raise ValueError return Mutable.coerce(key,value) else: return value def __setitem__(self,value): "Detect array set events and emit change events." np.ndarray.__setitem__(self,value) self.changed() def __delitem__(self,key): "Detect array del events and emit change events." np.ndarray.__delitem__(self,key) self.changed() def __getstate__(self): d = self.__dict__.copy() d.pop('_parents',None) return d class MyTable(Base): __tablename__ = 'my_table' id = Column(Integer,primary_key=True) data = Column(MutableNumpy.as_mutable(PickleType)) from sqlalchemy import inspect from sqlalchemy.orm import sessionmaker from sqlalchemy import create_engine engine = create_engine('sqlite:///tmp.db',echo=True) Base.metadata.create_all(engine) Session = sessionmaker(bind=engine) sess = Session() row = MyTable(data=np.zeros((2,2),dtype=int)) sess.add(row) sess.commit() row.data[0,0] = 1 hist = inspect(row).attrs.data.history print(hist.added) # Shows [[1,0],[0,0]] as expected print(hist.unchanged) # Empty as expected print(hist.deleted) # Does NOT show the original array [[0,0]] 替换为DT

sample()

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?