我的问题与以下post
非常相似在我的数据库中,我有多个列,其中包含 M0、M6、M12... 等值。我有一些列的名称为 M0、M6、M12...
我想将包含 M0... 的第一列替换为该列中对应的值
作为一个理解示例,我有:
df <- data.frame(time=c("M0","M12","M0","M0","M12"),
M0=c(1,2,4,5,1),
M12=c(8,5,9,2,1))
df
time M0 M12
1 M0 1 8
2 M12 2 5
3 M0 4 9
4 M0 5 2
5 M12 1 1
如前所述,我发现一篇文章有有趣的答案,特别是使用
cur_data()
df2 <- df %>%
rowwise %>%
mutate(newd = cur_data()[[cur_data()$time]]) %>%
ungroup
df2
# A tibble: 5 × 4
time M0 M12 newd
<chr> <dbl> <dbl> <dbl>
1 M0 1 8 1
2 M12 2 5 5
3 M0 4 9 4
4 M0 5 2 5
5 M12 1 1 1
它有效,但需要很长时间,而且显然
cur_data
已被弃用,取而代之的是pick()
,我不知道如何替换它以使其工作
任何对此的建议将不胜感激!
您可以在基础 R 中使用子集化:
df$newd <- df[-1][cbind(seq_len(nrow(df)), match(df$time, names(df)[-1]))]
df
time M0 M12 newd
1 M0 1 8 1
2 M12 2 5 5
3 M0 4 9 4
4 M0 5 2 5
5 M12 1 1 1