x <- c("a", 2, 3, 1.0)
y <- c("b", 1, 6, 7.9)
z <- c("c", 1, 8, 2.0)
p <- c("d", 2, 9, 3.3)
df1 <- data.frame(x,y,z,p)
这是一个快速示例数据集,但它并没有完全反映出我想要做的事情。假设我想从第2行的每个级别的因子中获取50个随机样本(在这种情况下,我们只有2个级别的因子)...我将如何有效地编码?我有一个版本在循环中工作,但感觉不必要复杂
编辑:当我说我想要取50个随机样本时,我的意思是从每个级别的因子中取50列。
答案 0 :(得分:1)
也许你正在寻找这样的事情:
x1 <- df1[,sample(c(1,4),50,replace = TRUE)]
x2 <- df1[,sample(c(2,3),50,replace = TRUE)]
...但你的问题非常令人困惑。 “因子”是指R中非常具体的东西:一种变量,通常存储在数据框的一列中,而不是一行。此外,您似乎强制所有列本身都是因子(或可能是字符),这似乎是存储值3.3
的奇怪方法。
答案 1 :(得分:1)
您需要提取一个因子(假设第二行是一个因子)。
fact <- as.factor(as.matrix(df1[2,]))
然后使用您希望成为其中一个因素的第二列。例如,为因子
的第一个值采样全部df1[,df1[2,]==levels(fact)[1],]
或准确地获得50:
df1[,df1[2,]==levels(fact)[1],][1:50]