【发布时间】:2021-02-22 22:29:22
【问题描述】:
总结:你可以做 rename(A=1, B=2),你能用 rename_with() 做同样的事情吗?我的 ~str_replace(... paste0()) 有效,我不需要改变它。但它一次只适用于一个变量。 Tidyselect 建议包装 where(~str_replace...) 但随后抱怨它找不到它,即使我可以让 where() 在其他情况下工作。
我想为多个变量实现 rename_with,但我收到错误 Error: Formula shorthand must be wrapped in where()`。
# Bad
data %>% select(~str_replace(., "Var_2_", paste0("Issue: Time")))
# Good
data %>% select(where(~str_replace(., "Var_2_", paste0("Issue: time"))))
示例原件:
test%>% rename_with( ~str_replace(., "Var_2_", paste0("Issue: Time")), ~str_replace(., "Var_3_", paste0("Issue: Time")))
当我跑步时
test%>% rename_with(where( ~str_replace(., "Var_2_", paste0("Issue: Time")), ~str_replace(., "Var_3_", paste0("Issue: Time"))))
和
test%>% rename_with( where(~str_replace(., "Var_2_", paste0("Issue: Time"))), where(~str_replace(., "Var_3_", paste0("Issue: Time"))))
我明白了
Error in where(~str_replace(., "Var_1_", paste0("Gov't surveillance: video wave")), : could not find function "where"
而且我在tidyselect:: 中找不到它的标签
但我可以跑
test%>% select(where(is.numeric)) %>% map(sd, na.rm = TRUE)
没有任何问题,所以它确实存在。我做错了什么?
示例数据:
x <- c("_1_1",
"_1_2",
"_1_3",
"_2_1",
"_2_2",
"_2_3",
"_3_1",
"_3_2",
"_3_3",
"_4_3")
paste0("Var",x)
test <- t(as_tibble(rnorm(10, 5.5, .35)))
colnames(test) <- paste0("Var",x)
【问题讨论】:
-
你的
df和test一样吗 -
您的示例“测试”是
matrix。你能显示预期的输出吗?此外,显示的列名没有Issue: time -
如果您检查数据和代码,两个参数中的
str_replace用法不清楚,因为原始数据中没有“问题:时间”列。所以,假设你想用那个子字符串替换 -
例如考虑你的代码
test%>% rename_with( ~str_replace(., "Var_2_", paste0("Issue: Time")), ~str_replace(., "Var_3_", paste0("Issue: Time")))你能描述一下它到底想做什么吗?从代码中,它看起来正在尝试使用“问题:时间”删除“Var_2_”,同时匹配具有“Var_3”的列对不起,这有点太混乱了
标签: r tidyverse tidyselect