我有此数据帧提取物值(无因子)
d1 <- c(1, 0, 0, 1, 0, 0, 0, 1)
d2 <- c(0, 1, 0, 1, 1, 0, 0, 0)
d3 <- c(0, 0, 1, 0, 0, 0, 1, 0)
d4 <- c(0, 0, 0, 1, 0, 0, 0, 0)
d5 <- c(0, 0, 0, 0, 0, 0, 1, 0)
d6 <- c(0, 0, 0, 1, 0, 1, 0, 1)
d7 <- c(0, 0, 1, 0, 0, 1, 0, 1)
d8 <- c(1, 0, 0, 0, 0, 0, 0, 1)
d9 <- c(0, 0, 0, 0, 0, 1, 0, 1)
d10 <- c(1, 1, 0, 0, 0, 1, 0, 1)
df <- as.data.frame(rbind(d1,d2,d3,d4,d5,d6,d7,d8,d9,d10))
str(df)
我得到的所有行,其中V8 == 1,并找到这样每列中的相对频率(例如柱2,V2):
table(df[which(df$V8==1),][2])/sum(as.numeric(df[which(df$V8==1),]$V8))
0 1
0.8333333 0.1666667
我的问题是我怎么能单独获取每个相对频率,比方说,把它变成一个新的变量。我发现这个
但它并不在我的情况下工作,因为0和1 numericals。
table(df[which(df$V8==1),][2])/sum(as.numeric(df[which(df$V8==1),]$V8))["1"]
一种方法是存储表,然后提取:'temp < - table(df [which(...',然后'temp [“1”]')。另一个是将语句包装在'()'中,像这样(' 1)] $ V8)))[ “1”]'。 – lmo
@Imo我试过了,它返回“整个”列,而不仅仅是0.1666667 –
我认为你对输出有点困惑。 0和1实际上是元素的名称。如果你有临时对象,调用'names(temp)'。如果你愿意的话,你可以用'unname'去掉它们,但是这些名字不会进入任何计算。另一种看待这个问题的方法是尝试'temp [“1”] + 5'。 – lmo