这个问题可能在其他地方问过,但是由于我是R语言的新手,而且我的词汇量有限,所以我似乎找不到它。
如果我有一个充满字符的数据框,请说:
c1 <- c("aa", "bb", "cc", "dd", "ee")
c2 <- c("ff", "gg", "hh", "ii", "jj")
c3 <- c("kk", "ll", "mm", "nn", "oo")
c4 <- c("pp", "qq", "rr", "ss", "tt")
c5 <- c("uu", "vv", "ww", "xx", "yy")
df <- cbind.data.frame(c1, c2, c3, c4, c5)
导致
c1 c2 c3 c4 c5
1 aa ff kk pp uu
2 bb gg ll qq vv
3 cc hh mm rr ww
4 dd ii nn ss xx
5 ee jj oo tt yy
我想从第4列中选择与第2列中的多个元素占据同一行的元素(例如,“ gg”,“ ii”和“ jj”),有没有办法做到这一点对每个命令使用不同的命令?
例如,
df$c4[i = c(2,4,5)]
将返回
[1] qq ss tt
Levels: pp qq rr ss tt
和
df$c4[df$c2 == "gg"]
将返回
[1] qq
Levels: pp qq rr ss tt
但是当我尝试将两者结合在一起
df$c4[i = c(df$c2=="gg", df$c2=="ii", df$c2=="jj")]
R似乎只部分知道该怎么做,返回
[1] qq <NA> <NA>
Levels: pp qq rr ss tt
答案 0 :(得分:0)
不确定您真正想要完成什么,但是在最后一行中,这实际上是您要做的:
> df$c4[i = c(df$c2=="gg", df$c2=="ii", df$c2=="jj")]
[1] "qq" NA NA
> i = c(df$c2=="gg", df$c2=="ii", df$c2=="jj")
> i
[1] FALSE TRUE FALSE FALSE FALSE FALSE FALSE FALSE TRUE
[10] FALSE FALSE FALSE FALSE FALSE TRUE
> df$c2
[1] "ff" "gg" "hh" "ii" "jj"
您正在将长度为15
的逻辑向量传递给长度为5
的字符向量,这没有什么意义。