我有下面的玩具数据框。
toy.df <- data.frame(Name = c("group1", "group2", "group3", "group4", "group5", "group6", "group7"),
col1 = c("pos", "neg", "NA", "pos","neg", "NA", "pos"),
col2 = c("pos", "pos", "NA", "pos","neg","NA", "neg"),
col3 = c("pos", "NA", "pos", "NA", "neg", "neg", "neg"))
我想变异一个新列,检查每行所有列的值。如果它们都是“pos”或“NA”,则变异“pos”,如果它们都是“neg”或“NA”,则变异“neg”,如果它们都是“pos”或“neg”或“NA”,则变异“both”。
新列如下所示:
col4 <- c("pos", "both", "pos", "pos","neg", "neg","both")
以下是最后一个 Dataframe :
Name col1 col2 col3 col4
group1 pos pos pos pos
group2 neg pos NA both
group3 NA NA pos pos
group4 pos pos NA pos
group5 neg neg neg neg
group6 NA NA neg neg
group7 pos neg neg both
2条答案
按热度按时间m1m5dgzv1#
由于数据框中的“NA”是文字“NA”,我们需要将它转换为真实的的缺失值
NA
x x xna_if
。然后使用case_when
提供新列赋值的条件。我们需要rowwise
才能在每行中工作。case_when
中的最后一个TRUE ~ "unknown"
捕获除了“pos”和“neg”之外的字符串在col1
到col3
中。我添加了两个条目来显示当所有行都是
NA
时,或者当列中有拼写错误时的行为。数据
fzsnzjdm2#
另一种方式:
输出: