如何按行中的因子子集列?

时间:2014-03-28 22:07:57

标签: r

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列。

2 个答案:

答案 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]