我已经面临三天的问题了,我无法得到任何关于它为什么不起作用的答案。我尝试了很多不同的方法,但我只想发布一个我认为可能最接近解决方案的方法。我将简要介绍一下我想问的问题。
我在名为" Myfolder &#34的文件夹中有 7个csv文件(称为001.csv,002.csv,...等) ;。 我一直在尝试使用 for-loop将功能 合并添加到唯一的 data.frame 所有这些不同的.csv文件中和r.bind ,最后返回来自任何一列" Colour1"的意思或" Colour2"取决于"颜色" (专栏)和"儿童" (行)我选择,当然没有错过价值" Na"。作为一个例子,当我合并文件时,我得到一个像这个数据框的数据框:
Colour1 Colour2 Children
NA NA 1
9 NA 2
NA NA 2
NA 5 3
7 NA 4
NA NA 5
NA 8 5
2 NA 6
6 3 6
14 NA 7
这是我要构建的函数的示例 get_mean< - function(目录,颜色,子项)
我尝试了什么
get_mean <- function(directory, colour, children) {
files <- list.files(directory, full.names=TRUE)
allfiles <- data.frame()
for(i in 1:7) {
allfiles <- rbind(allfiles, read.csv(files[i]))
}
if(colour == "colour1"){
mean(allfiles$colour1[allfiles$Children == children], na.rm = TRUE)
}
if(colour == "colour2"){
mean(alllists$colour2[alllist$Children == children], na.rm = TRUE)
}
}
当我尝试例如:
get_mean("Myfolder", "colour1", 3:6)
我得到了
In alllist$ID == id :
longer object length is not a multiple of shorter object length
当我尝试时:
get_mean("Myfolder", "colour1", 6)
我明白了:
>
是的伙计......我绝对没有回来。
你觉得伙计们怎么样?对它进行任何修正?任何其他方式来获得平均值?注意:我在这里放的所有数据都不是我正在使用的数据。这只是一个更大的练习的例子。我试图用不同的名字和数字做一个非常小的例子,以便不讨论练习本身,而其他人可以复制解决方案
答案 0 :(得分:1)
以下是您的功能的更正且更具可读性的版本 - 我将data.frame
所有文件命名为df
,我还添加了对colour
的检查:
get_mean <- function(directory, colour, children) {
files = list.files(directory, full.names=T)
df = do.call(rbind, lapply(files[1:7], read.csv))
# check the colour argument
if(!is.element(colour, c('colour1','colour2')))
stop(sprtinf('colour argument value %s is not part of df column', colour))
mean(df[[colour]][df$Children == children], na.rm=TRUE)
}