我有一个像下面这样的df。:
我想做以下两个步骤:
1.如果col name的第一个字母与Grade
中的值匹配,并且当前值为NA,则将其替换为0。
1.将A1:B2中的值更新为当前值(current value * 100/ colsums()
)。
我怎样才能让这一切发生?
df <- structure(list(Grade = c("A", "A", "B", "B"), Pass = c("Y", "N",
"Y", "N"), A1 = c(7, 8, NA, NA), A2 = c(4, 5, NA, NA), A3 = c(9,
NA, NA, NA), B1 = c(NA, NA, 8, NA), B2 = c(NA, NA, 3, 4)), row.names = c(NA,
-4L), class = c("tbl_df", "tbl", "data.frame"))
2条答案
按热度按时间cbjzeqam1#
使用
dplyr
包,我们可以将across
与case_when
一起使用(如果您想使用两个单独的ifelse
,请检查我的old edits)。更新
如果要使用
colnames
,则需要先pick
列。fgw7neuy2#
具有两个枢轴的备选方案: