我正在try 用df中其他列中的相应值替换多个列上的NA.


df = data.frame(ID = sample(1000:9999,10),
                Age = sample(18:99,10),
                Gender = sample(c("M","F"),10, replace = TRUE),              
                Test1 = sample(60:100,10),
                Test2 = sample(60:100,10),
                Test3 = sample(60:100,10),
                Test1.x = rep(NA,10),
                Test2.x = rep(NA,10),
                Test3.x = rep(NA,10))

df$Test1[c(2,3,8)] = NA
df$Test2[c(4,10)] = NA
df$Test3[c(1,7)] = NA
df$Test1.x[c(2,3,4,8)] = sample(60:100,4)
df$Test2.x[c(4,9,10)] = sample(60:100,3)
df$Test3.x[c(1,6,7)] = sample(60:100,3)
print(df)
    ID Age Gender Test1 Test2 Test3 Test1.x Test2.x Test3.x
1  7877  40      M    78    70    NA      NA      NA      84
2  6345  54      F    NA    99    61      62      NA      NA
3  9170  41      F    NA    80    96      82      NA      NA
4  2400  83      M   100    NA   100      94      95      NA
5  5920  66      M    77    62    69      NA      NA      NA
6  2569  34      M    99    96    81      NA      NA     100
7  7879  28      M    64    71    NA      NA      NA      90
8  8652  53      F    NA    74    89      95      NA      NA
9  6357  97      F    92    86    83      NA      86      NA
10 1943  45      M    95    NA    98      NA      72      NA

我只想用相应的test.x分数替换测试分数中的Nas,同时使用str_place.我的实际数据框包含超过3列,但所有对应的列名都与后面的".x"相同.

有什么办法让这件事变得又快又容易吗?我正在努力在这些列之间进行变异,还是使用REPLACE_NAS.

推荐答案

使用dplyover

library(dplyover)
df <- df %>% 
   mutate(across2(matches("Test\\d+$"), ends_with(".x"),
       coalesce, .names = "{xcol}"))

-输出

df
     ID Age Gender Test1 Test2 Test3 Test1.x Test2.x Test3.x
1  7877  40      M    78    70    84      NA      NA      84
2  6345  54      F    62    99    61      62      NA      NA
3  9170  41      F    82    80    96      82      NA      NA
4  2400  83      M   100    95   100      94      95      NA
5  5920  66      M    77    62    69      NA      NA      NA
6  2569  34      M    99    96    81      NA      NA     100
7  7879  28      M    64    71    90      NA      NA      90
8  8652  53      F    95    74    89      95      NA      NA
9  6357  97      F    92    86    83      NA      86      NA
10 1943  45      M    95    72    98      NA      72      NA

R相关问答推荐

如何正确使用' programme::programme_bar$Message()'?

按R中不同长度的组将日期时间列值四舍五入到小时

如何向使用plot_smooths()函数显示的GAM结果图表中添加点?

R:随机抽取所有可能排列的样本

使用lares::corr_var函数在for循环中分配变量的问题

更改编号列表的 colored颜色

在R中替换函数中的特定符号

从BRM预测价值

根据文本字符串中的值粘贴新列

在ggplot中为不同几何体使用不同的 colored颜色 比例

根据元素和前一个值之间的差值过滤矩阵的元素

如果可能,将数字列转换为整数,否则保留为数字

LOF中的插图短文字幕

如何识别倒排的行并在R中删除它们?

R如何计算现有行的总和以添加新的数据行

派生程序包| ;无法检索';return()';的正文

按组内中位数分类

如何使用FormC使简单算术运算得到的数字是正确的?

删除在R中的write.table()函数期间创建的附加行

访问数据帧中未定义的列时出现R错误