考虑以下数据集:
\ndf <- tibble(v1 = 1:5, v2= 101:105, v3 = c("v1", "v2", "v1", "v2", "v1"))\n\n# A tibble: 5 \xc3\x97 3\n v1 v2 v3 \n <int> <int> <chr>\n1 1 101 v1 \n2 2 102 v2 \n3 3 103 v1 \n4 4 104 v2 \n5 5 105 v1 \nRun Code Online (Sandbox Code Playgroud)\n我想生成一个新列,该列从 或 中获取值v1,v2具体取决于中列出的列v3。
# A tibble: 5 \xc3\x97 4\n v1 v2 v3 v4\n <int> <int> <chr> <dbl>\n1 1 101 v1 1\n2 2 102 v2 …Run Code Online (Sandbox Code Playgroud) 这是一个数据表:
library(data.table)
DT <- data.table(airquality)
Run Code Online (Sandbox Code Playgroud)
这个例子产生了我想要的输出:
DT[, `:=`(New_Ozone= log(Ozone), New_Wind=log(Wind))]
Run Code Online (Sandbox Code Playgroud)
如何编写一个函数log_those_columns,使以下代码片段输出相同的结果?
old_names <- c("Ozone", "Wind")
new_names <- c("New_Ozone", "New_Wind")
log_those_columns(DT, old_names, new_names)
Run Code Online (Sandbox Code Playgroud)
请注意,我需要old_names并且new_names足够灵活以包含任意数量的列。
(我从关于这一主题的类似StackOverflow的问题看,答案可能涉及的一些组合.SD,with=F,parse(),eval(),和/或substitute(),但我似乎没有指甲要使用的那些和在哪里可以)。