【发布时间】:2023-04-08 17:00:02
【问题描述】:
我有一个数据框测试:
group userID A_conf A_chall B_conf B_chall
1 220 1 1 1 2
1 222 4 6 4 4
2 223 6 5 3 2
1 224 1 5 4 4
2 228 4 4 4 4
数据包含每个用户的响应(由用户 ID 显示),其中每个用户都可以为这两个度量输入 1 到 6 之间的任何值:
- 配置
- 挑战
他们也可以选择不响应,从而导致NA条目。
test 数据框包含多个列,例如 A、B、C、D 等。可以为这些列中的每一个单独报告 Conf 和 Chall 度量。
我有兴趣进行以下比较:
- A_conf & A_chall
- B_conf & B_chall
如果这些测量值中的任何一个相等,则 Final 计数器应递增(如下所示)。
group userID A_conf A_chall B_conf B_chall Final
1 220 1 1 1 2 1
1 222 4 6 4 4 1
2 223 6 5 3 2 0
1 224 1 5 4 4 1
2 228 4 4 4 4 2
我正在与 Final 计数器作斗争。什么脚本可以帮助我实现这个功能?
作为参考,test数据框集的dput分享如下:
-
输入(测试):
结构(列表(组= c(1L,1L,2L,1L,2L),
用户ID = c(220L, 222L, 223L, 224L, 228L),
A_conf = c(1L, 4L, 6L, 1L, 4L),
A_chall = c(1L, 6L, 5L, 5L, 4L),
B_conf = c(1L, 4L, 3L, 4L, 4L),
B_chall = c(2L, 4L, 2L, 4L, 4L)),
class= "data.frame", row.names = c(NA, -5L))
我试过这样的代码:
test$Final = as.integer(0) # add a column to keep counts
count_inc = as.integer(0) # counter variable to increment in steps of 1
for (i in 1:nrow(test)) {
count_inc = 0
if(!is.na(test$A_conf[i] == test$A_chall[i]))
{
count_inc = 1
test$Final[i] = count_inc
}#if
else if(!is.na(test$A_conf[i] != test$A_chall[i]))
{
count_inc = 0
test$Final[i] = count_inc
}#else if
}#for
上述代码仅适用于 A_conf 和 A_chall 列。问题是,无论输入的值(由用户)是否相等,它都会用全 1 填充 Final 列。
【问题讨论】:
标签: r count duplicates elementwise-operations rowwise