【发布时间】:2021-12-25 01:31:33
【问题描述】:
我正在尝试创建一个非常基本的函数,我想根据 df 中的特定列从 df 中删除任何 0 值(或更少)。当我在函数之外运行这些行时,它们可以工作,但是当我尝试在函数中运行它们时,出现此错误“$<-.data.frame(*tmp*, name, value = numeric(0)) 中的错误:替换有 0 行”。有谁知道问题出在哪里?
Remove_Missing=function(x,name){
x$name=as.numeric(x$name)
x=x[x$name>0,]
}
编辑:
示例代码:
#First two lines work but those same two lines won't work if function is called
merged_data$name=as.numeric(merged_data$HETENURE)
merged_data=merged_data[merged_data$HETENURE>0,]
Remove_Missing(merged_data, HETENURE) #Call function
数据
structure(list(HRHHID = c("008906910993941", "008906910993941",
"648061954059610", "160916068405549", "160916068405549", "168069009100998"
), HRYEAR4 = c("2010", "2010", "2010", "2010", "2010", "2010"
), HETENURE = c(" 1", " 1", " 3", " 1", " 1", " 1"), HEFAMINC = c("11",
"11", "10", "13", "13", "14"), HRNUMHOU = c(" 2", " 2", " 1",
" 2", " 2", " 3"), GESTFIPS = c("01", "01", "01", "01", "01",
"01"), GTMETSTA = c("2", "2", "1", "1", "1", "1"), PEMARITL = c(" 1",
" 1", " 4", " 1", " 1", " 1"), PESEX = c(" 2", " 1", " 1", " 2",
" 1", " 2"), PEEDUCA = c("40", "45", "40", "42", "41", "39"),
PTDTRACE = c(" 1", " 1", " 1", " 1", " 1", " 1"), PEHSPNON = c(" 2",
" 2", " 2", " 2", " 2", " 2"), PEMLR = c(" 5", " 5", " 5",
" 1", " 1", " 7"), PRFTLF = c("-1", "-1", "-1", " 1", " 1",
"-1"), PRHRUSL = c("-1", "-1", "-1", " 4", " 4", "-1"), HESP1 = c("-1",
"-1", "-1", "-1", "-1", "-1"), HESP6 = c("-1", "-1", "-1",
"-1", "-1", "-1"), HESP7A = c("-1", "-1", "-1", "-1", "-1",
"-1"), HESP8 = c("-1", "-1", "-1", "-1", "-1", "-1"), HRFS12M1 = c(" 1", " 1", " 1", " 1", " 1", " 1")), row.names = c(9L, 10L, 11L,
12L, 13L, 15L), class = "data.frame")
【问题讨论】:
-
请显示数据、有效的代码和“无效”的代码,以及所谓的不当输出
-
请注意,当人们要求澄清时,我们通常应该编辑问题以反映这一点。请避免使用 cmets 部分进行重要编辑,但要编辑问题
-
我们可以随时通过粘贴
dput(merged_data)或dput(head(merged_data))的输出来共享数据 -
函数没有返回值。在最后一行代码中删除
x=部分,仅保留x[x$name>0,]并查看它提供了什么。 -
同样的错误,但我试过了。更新了上面的问题。