我有这个数据集:
structure(list(ID = c(1, 2, 3, 4, 6, 7), V = c(0, 0, 1, 1,
1, 0), Mus = c(1, 0, 1, 1, 1, 0), R = c(1, 0, 1, 1, 1, 1),
E = c(1, 0, 0, 1, 0, 0), S = c(1, 0, 1, 1, 1, 0), t = c(0,
0, 0, 1, 0, 0), score = c(1, 0.4, 1, 0.4, 0.4, 0.4)), row.names = c(NA,
-6L), class = c("tbl_df", "tbl", "data.frame"), na.action = structure(c(`5` = 5L,
`12` = 12L, `15` = 15L, `21` = 21L, `22` = 22L, `23` = 23L, `34` = 34L,
`44` = 44L, `46` = 46L, `52` = 52L, `56` = 56L, `57` = 57L, `58` = 58L
), class = "omit"))
我想对分数列进行新赋值,如下所示:
1.在每个ID的情况下,如果出现数字1大于3,则在最后一列中应该出现数字1。
1.在每个ID的情况下,如果出现数字1等于3,则最后一列应该出现数字0.4。
1.在每个ID的情况下,如果出现数字1小于3,则最后一列应该出现数字0。
请建议一种通过for循环、dplyr、map或apply函数来实现这一点的方法?
谢谢
1条答案
按热度按时间xzabzqsa1#
这应该可以实现-计算新
ones
列中1的个数,然后使用case_when
应用条件:为了让它更整洁,你可以直接在
case_when
中使用sum(c_across(V:t))
,而不需要一个新的变量(尽管每次都要重复计算):