【发布时间】:2020-01-22 19:36:45
【问题描述】:
我刚开始学习编程,我有一个问题对你来说可能很容易。 我有一个看起来像这样的数据集
df <- data.frame(id= c(1,1,1,2,2,2,3,3,3), time=c(1,2,3,1,2,3,1,2,3),y = rnorm(9), x1 = LETTERS[seq( from = 1, to = 9 )], x2 = c(0,0,0,0,1,0,1,1,1),c2 = rnorm(9))
df
# id time y x1 x2 c2
# 1 1 1 0.6364831 A 0 -0.066480473
# 2 1 2 0.4476390 B 0 0.161372575
# 3 1 3 1.5113458 C 0 0.343956178
# 4 2 1 0.3532957 D 0 0.279987147
# 5 2 2 0.3401402 E 1 -0.462635393
# 6 2 3 -0.3160222 F 0 0.338454940
# 7 3 1 -1.3797158 G 1 -0.621169576
# 8 3 2 1.4026640 H 1 -0.005690801
# 9 3 3 0.2958363 I 1 -0.176488132
我正在编写一个包含多个步骤的函数。我想为函数提供数据集和感兴趣的变量这两个元素。
但是,当我尝试 dcast 时,该函数会崩溃,因为它无法对变量进行个体化。该函数的关键步骤如下所示。
testfun<-function(df,var)
{
newdf <- dcast(dataset,id+time~ x1, value.var = var) %>% # note this should be the variable of interest that i feed into the function
distinct()
return(newdf)
}
df2<-testfun(df,y)
谁能帮我解释一下如何创建一个函数来索引数据集和函数?
提前感谢您的帮助
【问题讨论】:
-
您确定您正确使用
dcast吗?您对newdf的预期输出是什么?你如何在函数dcast(dataset,id+time~ x1, value.var = var)之外运行它? -
由于您使用的是 dplyr,请使用相应的 tidyr 函数而不是
dcast。这允许您传入变量。 -
因为这个
dcast只是一个更复杂的函数中的一个步骤。我需要将其应用于多个数据集和多个变量,因此我想编写一个函数一次执行所有操作以使脚本更清晰。 @RonakShah -
@KonradRudolph,我更喜欢使用 dcast,因为它是一个非常大的数据集,而且速度更快。但是 dplyr 命令会产生相同的输出吗?
-
您真的希望您的数据看起来像这样吗?
dcast(df,id+time~ x1, value.var = "y")