如何在一行中搜索特定值。例如,該數據r行中的搜索值
a <- c("a", "a", "b", "c")
b <- c("b", "a", "b", "d")
c <- c("c", "a", "b", "c")
d <- c("a", "a", "b", "a")
x <- data.frame(cbind(a,b,c,d))
head(x)
我想知道是否有一個「A」,「B」,「C」,或「d」的第一排。最佳結果看起來像附加的列表示每行中有多少個。再次
謝謝!
如何在一行中搜索特定值。例如,該數據r行中的搜索值
a <- c("a", "a", "b", "c")
b <- c("b", "a", "b", "d")
c <- c("c", "a", "b", "c")
d <- c("a", "a", "b", "a")
x <- data.frame(cbind(a,b,c,d))
head(x)
我想知道是否有一個「A」,「B」,「C」,或「d」的第一排。最佳結果看起來像附加的列表示每行中有多少個。再次
謝謝!
什麼你也可以這樣做:
library(reshape2)
df1 <- as.data.frame.matrix(table(melt(as.matrix(x))[,c(1,3)]))
cbind(x,df1)
# a b c d a b c d
#1 a b c a 2 1 1 0
#2 a a a a 4 0 0 0
#3 b b b b 0 4 0 0
#4 c d c a 1 0 2 1
你的意思是這樣嗎?並不完全清楚自己想要的輸出看起來像
x$A <- apply(x,1,function(x) length(grep("a",x)))
x$B <- apply(x,1,function(x) length(grep("b",x)))
x$C <- apply(x,1,function(x) length(grep("c",x)))
x$D <- apply(x,1,function(x) length(grep("d",x)))
> x
a b c d A B C D
1 a b c a 2 1 1 0
2 a a a a 4 0 0 0
3 b b b b 0 4 0 0
4 c d c a 1 0 2 1
另一種方法堅持基地:
f<-function(x) table(factor(unlist(x),levels=letters[1:4]))
df1<-t(apply(x,1,f))
cbind(x,df1)
a b c d a b c d
1 a b c a 2 1 1 0
2 a a a a 4 0 0 0
3 b b b b 0 4 0 0
4 c d c a 1 0 2 1
到JR的答案類似,但有點不同:
s <- split(unlist(x), rep.int(seq_len(nrow(x)), nrow(x)))
cbind(x, do.call(rbind, Map(table, s)))
# a b c d a b c d
# 1 a b c a 2 1 1 0
# 2 a a a a 4 0 0 0
# 3 b b b b 0 4 0 0
# 4 c d c a 1 0 2 1
vapply
實際上可能會更好(更快):
cbind(x, t(vapply(s, table, integer(4L))))
# a b c d a b c d
# 1 a b c a 2 1 1 0
# 2 a a a a 4 0 0 0
# 3 b b b b 0 4 0 0
# 4 c d c a 1 0 2 1
請包括您想要的示例輸出 – janos 2014-11-03 20:37:37