library(dplyr)
mydf <- data.frame(a_x = c(1,2,3,4,5),
b_x = c(8,9,10,11,12),
a_y = c("k",'b','a','d','z'),
b_y = c('aa','bb','cc','dd','ee'),
prefix=c("a","b","c","a","a"))
mydf
假设我拥有的数据是 mydf,我想产生与 mydf2 相同的结果。
我用包含要提取的值的列的名称创建了一个列。 我想通过这个列提取值。
mydf2 <- data.frame(a_x=c(1,2,3,4,5),
b_x=c(8,9,10,11,12),
prefix=c("a","b","c","a","a"),
desired_x_value = c(1,9,NA,4,5),
desired_y_value = c('k','bb',NA,'d','z'))
mydf2
我已经使用了“get”和“paste0”,但它不起作用。我可以通过“dplyr”链解决这个问题吗?
mydf %>% mutate(desired_x_value = get(paste0(prefix,"_x")),
desired_y_value = get(paste0(prefix,"_y")))
最佳答案
所以基本上您想要创建新列(desired_x_value 和 desired_y_value),其值取决于条件。使用 dplyr
我更喜欢 case_when,因为它是最好的可读方式,但您也可以使用(嵌套的)if(else) 语句。它正在做的是“如果 X 满足条件 A 执行 Y,如果 X 满足条件 B 执行 Z,如果 X 满足条件 .... 执行 ...”
mydf %>%
dplyr::mutate(
desired_x_value = case_when(
prefix == "a" ~ a_x,
prefix == "b" ~ b_x,
desired_y_values = case_when(
prefix == "a" ~a_y,
prefix == "b" ~b_y,
TRUE ~ NA_character_ ))
如果需要,您可以在第二步中删除不再需要的列。上面的代码结果在表中:
a_x b_x a_y b_y prefix desired_x_value desired_y_values
1 1 8 k aa a 1 k
2 2 9 b bb b 9 bb
3 3 10 a cc c NA <NA>
4 4 11 d dd a 4 d
5 5 12 z ee a 5 z
https://stackoverflow.com/questions/67368179/
相关文章:
reactjs - 属性 'type' 在类型中缺失。但在类型 'Props' 中是必需的
amazon-ec2 - Tensorflow 安装在 AWS ec2 实例上终止
c++ - 如何在 cpp 中为 std::unordered_map
flutter - 类型错误 : Cannot read property 'isSupported
c++ - 我可以在没有默认初始化的情况下初始化数组的 std::unique_ptr (我只想让它
node.js - 如何从 bull js 中删除延迟的工作?
typescript - typescript 上的 Socket.io 附加属性不存在