R 如何修复此函数,以便在数据帧上运行它?
这是两周内我第二次处理包含大量空列的数据。这是公共记录数据,我只对一个类别感兴趣。我怀疑较大数据集的其他类别使用这些列,但我关心的子集没有。所以我过滤掉我不想要的记录,然后我想系统地剔除空列 这个问题有一个很好的方法:R 如何修复此函数,以便在数据帧上运行它?,r,R,这是两周内我第二次处理包含大量空列的数据。这是公共记录数据,我只对一个类别感兴趣。我怀疑较大数据集的其他类别使用这些列,但我关心的子集没有。所以我过滤掉我不想要的记录,然后我想系统地剔除空列 这个问题有一个很好的方法: 我得到了期望的结果:6obs。共1个变量。但要重用它,我必须替换demo三次。甚至可以使用函数直接转换数据帧吗 我认为你的问题可以归结为范围问题。在R中,当您调用函数时,在该函数中创建的所有内容都是本地的,在该函数之外无法访问。因此,当您将演示数据帧传递给函数时,它是否在该函数
我得到了期望的结果:
6obs。共1个变量
。但要重用它,我必须替换demo
三次。甚至可以使用函数直接转换数据帧吗 我认为你的问题可以归结为范围问题。在R中,当您调用函数时,在该函数中创建的所有内容都是本地的,在该函数之外无法访问。因此,当您将演示数据帧传递给函数时,它是否在该函数内部操作它,但在函数外部无法访问它。为了从函数中得到结果,人们通常返回一个值并分配结果。例如:
add<- function(x,y) { return(x+y)}
res <- add(1,2)
> res
[1] 3
add您没有从函数返回任何内容。在该函数的末尾添加一行df
,它可以正常工作。这种混淆可能是关于传递df
和在函数中修改,并期望全局修改它。这不是它的工作原理。您警告不要使用糟糕的解决方案,但真的有必要展示它吗<代码>哇,罗兰。严厉的我发现这个答案非常有用。向那些还没有准备好的人隐瞒信息是一种无稽之谈。
drop_empty_cols <- function(df) {
empty_columns <- sapply(df, function (k) all(is.na(k) | k == ""))
df <- df[!empty_columns]
}
drop_empty_cols(my_frame)
demo <- read.table(text="Real.Val All.NA Nothin.here
1 3.5 NA tmp
2 3.0 NA tmp
3 3.2 NA tmp
4 3.1 NA tmp
5 3.6 NA tmp
6 3.9 NA tmp" , header = TRUE)
demo$Nothin.here <- ""
empty_columns <- sapply(demo, function (k) all(is.na(k) | k == ""))
demo <- demo[!empty_columns]
add<- function(x,y) { return(x+y)}
res <- add(1,2)
> res
[1] 3
drop_empty_cols <- function(df) {
empty_columns <- sapply(df, function (k) all(is.na(k) | k == ""))
return(df[!empty_columns])
}
res<-drop_empty_cols(demo)
str(res)
'data.frame': 6 obs. of 1 variable:
$ Real.Val: num 3.5 3 3.2 3.1 3.6 3.9
drop_empty_cols <- function(df) {
empty_columns <- sapply(df, function (k) all(is.na(k) | k == ""))
demo <<- (df[!empty_columns])
}
drop_empty_cols(demo)
str(demo)
'data.frame': 6 obs. of 1 variable:
$ Real.Val: num 3.5 3 3.2 3.1 3.6 3.9