我已经连续3年将调查数据合并到一个数据框中。事实证明,每个调查的变量名称都不同(例如,有3倍于100个变量,而不仅仅是100个变量)。我正在尝试创建一个函数,允许我输入与同一问题有关的变量。然后,该函数观察哪个包含信息,并返回一个新变量替换原来的3个变量。
我试图创建下面的函数。使用“ coalesce”选择观察值,而忽略所有不适用。
df <- matrix(c(3, NA, NA, NA, 0.2, NA, NA, NA, 0.5),
ncol = 3, nrow = 3,
dimnames = list(NULL, c("a", "b", "c")))
special_function <-function(df, Name_new_variable, Name_a, Name_b, Name_c, na.rm= FALSE) {
df$Name_new_variable <- coalesce(df$Name_a,
df$Name_b,
df$Name_c
)
df$Name_a <- NULL
df$Name_b <- NULL
df$Name_c <- NULL
}
期望上面的函数可以查看数据帧“ df”。考虑新变量“ name_new_variable”的名称,并合并3列Name_a,Name_b,Name_c。
答案 0 :(得分:0)
如果您正在使用调查,建议您为Parameters
StreamNumber
The stream number which generated the event. When a voice enqueues more than one stream by speaking asynchronously, the stream number is necessary to associate an event with the appropriate stream.
使用数据框代替矩阵。当您使用df
库时,可以尝试以下代码:
dplyr
输出:
special_function <-function(df, Name_new_variable, Name_a, Name_b, Name_c) {
df <- as.data.frame(df) %>% select(Name_a, Name_b, Name_c)
df[, Name_new_variable]= coalesce(df[, Name_a], df[, Name_b], df[, Name_c])
df <- df %>% select(-c(Name_a, Name_b, Name_c))
return(df)
}
special_function(df, "NewVariableName", "a", "b", "c")