r - 是否有一个 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)
推荐阅读
- angular - Angular 6 材质菜单构建,
- ssl - Caddy + Organizr + Plex 媒体服务器 = 无法连接到 PMS?
- python - Python:使用存储在变量中的字符串为类创建属性
- javascript - Photoshop Javascript API 设置为毫米,但使用像素代替
- php - 从 curl 获取数据放入数组并在 php 中显示
- r - 如何根据另一个变量的值复制观察结果
- c++ - LineTraceSingleByChannel() 没有击中敌人
- python - 将 Twitter 数据写入 s3 存储桶
- firebase - Firestore 存储/GCS 如何构建数据以保护用户隐私
- java - 在 tomcat 中,http 请求体如何通过 jax-rs Jersey 转换为 java InputStream?