如何根据另一列中的值的频率(重复次数)从列中选择值/名称。在R?
这是我的样本数据..:
Col1 col2 Col3 Col4
Yuva 123 qwe XXYY
Arun 234 asd XYXY
Yuva 870 ghj XXYX
Naan 890 qwe XYYX
Shan 231 asd YXYX
Yuva 453 qwe YYXY
Naan 314 ghj YXYY
Yuva 908 bnm YYYx
现在我想知道函数/语句,它根据col3中的值发生的次数给出了col1和Col3的值对。即,当'qwe'发生一次(/两次/三次)时,col1中的对应值是多少。 预期的(必要的)答案是:
Upon giving I should get
---------------------------
qwe =1 Naan
qwe =2 Yuva
qwe=3 ------(not available). similarly
asd=1 Arun
Shan
ghj=1 Yuva
Naan
ghj = 2 -----(not available)
and for bnm=1 Yuva.
请帮帮我们。
答案 0 :(得分:1)
xtabs函数返回一个支持矩阵索引的列联表:
getCombs <- function(nam , cnt) names(
which(xtabs( ~Col1+Col3, data=dat)[ ,nam] == cnt)
)
> getCombs("ghj", 1)
[1] "Naan" "Yuva"
> getCombs("ghj", 3)
character(0)
如果您需要将“not available”作为值,那么只需测试length()== 0的结果并返回该字符串(如果是)。
答案 1 :(得分:0)
也许是这样的:
x <- read.table(textConnection("Col1\tcol2\tCol3\tCol4\nYuva\t123\tqwe\tXXYY\nArun\t234\tasd\tXYXY\nYuva\t870\tghj\tXXYX\nNaan\t890\tqwe\tXYYX\nShan\t231\tasd\tYXYX\nYuva\t453\tqwe\tYYXY\nNaan\t314\tghj\tYXYY\nYuva\t908\tbnm\tYYYx\n"), header=TRUE, sep="\t", stringsAsFactors=FALSE)
selCol1 <- function(x, valCol3, occur) {
s <- subset(x, Col3==valCol3)
f <- as.factor(s$Col1)
t <- table(f)
idx <- which(t==occur)
if(length(idx)==0)
return(NA)
else
return(levels(f)[idx])
}
selCol1(x,"qwe",1)
selCol1(x,"qwe",2)
selCol1(x,"qwe",3)
selCol1(x,"ghj",1)
selCol1(x,"ghj",2)
selCol1(x,"bnm",1)