是否有R函数用于计算行中的相同值?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了是否有R函数用于计算行中的相同值?相关的知识,希望对你有一定的参考价值。

我正在寻找一个函数,它可以通过在一个新列中返回此数字并将此字符串作为名称返回给出一行相同字符串的次数。我们来举个例子:

 df <- data.frame(
   Year = rnorm(3), 
   hour = rnorm(3), 
   LOT = rnorm(3), 
   S123_AA = c('ABF4576','AG4633','AWW07954'), 
   S135_AA = c('ABF5403','ABF4576','A64ED56'), 
   S1763_BB = c('BF50343','BGF4761','B76WW56'),  
   S173_BB = c('BF50343','BDZ4641','B917656') 
 )

所以,在第一行,我们观察了两次`BF50343,我正在寻找构建新列以获得:

 df <- data.frame(
   Year = rnorm(3), 
   hour = rnorm(3), 
   LOT = rnorm(3), 
   S123_AA = c('ABF4576','AG4633','AWW07954'), 
   S135_AA = c('ABF5403','ABF4576','A64ED56'), 
   S1763_BB = c('BF50343','BGF4761','B76WW56'),  
   S173_BB = c('BF50343','BDZ4641','B917656'),
   ABF4576 = c(1,1,0),
   AG4633 = c(0,1,0),
   AWW07954 = c(0,0,1),
   ABF5403 = c(1,0,0),
   A64ED56 = c(0,0,1),
   BF50343 = c(2,0,0),
   BGF4761 = c(0,1,0),
   B76WW56 = c(0,0,1),
   BDZ4641 = c(0,1,0),
   B917656 = c(0,0,1)
)

如果您有任何想法,请感谢您的时间

答案

您可以使用lapply循环遍历字符变量的唯一值:

cols <- !(colnames(df) %in% c("Year", "hour", "LOT")) ## variables of interest
vals <- as.character(unique(unlist(df[cols]))) ## unique values
res <- do.call("cbind", lapply(vals, function(x) rowSums(df[cols] == x)))
colnames(res) <- vals
df <- cbind(df, res)

以上是关于是否有R函数用于计算行中的相同值?的主要内容,如果未能解决你的问题,请参考以下文章

用R中不同数据帧中具有相同ID的行中的值替换列中的NA

R:仅当同一列中的两行中的值为真时才将值添加到 [row,column]

R Shiny中是否存在全局变量?

如何计算与 R 中相同列值关联的两个行值的差异?

检查每行C++的数组行中是不是总是有相同的值

【R】数值型向量及运算