R 脚本 - nchar(x) 函数在 sapply 中不起作用
R script - nchar(x) function is not working in sapply
当我尝试将 sapply 函数应用于 data.frame 时,它不起作用并且出现此错误:
"Error in nchar(x) : 'nchar()' requires a character vector"
应用函数是:
as.data.frame(sapply(df,function(x) nchar(x)))
我的 test.data 框架是:
df<-data.frame(valor1=c("R$ 27.144,22"," 30.035,07 "," 30.761,40 "),valor2=c("17.935,85","13.741,63","19.090,80"),valor3=c("0,00","0,00","1"))
我不明白为什么会出现该错误,因为我已按如下方式正确格式化我的数据框
df <- as.data.frame(sapply(df,as.character))
如果每个元素都是旧 data.frame 中每个元素的字符数,那么我想要的结果是一个新的 data.frame。在我的测试 data.frame 示例中,那将是:
valor1 valor2 valor3
[1]12 9 4
[2]11 9 4
[3]11 9 1
答案就在错误警告中。 nchar
需要一个字符向量,sapply
这里不会提供(调试时,sapply
的输出是"factor"而不是"character")。您必须改用 apply
:
ncharsap <- function() {
df1 <-data.frame(valor1=c("R$ 27.144,22"," 30.035,07 "," 30.761,40 "),valor2=c("17.935,85","13.741,63","19.090,80"),valor3=c("0,00","0,00","1"))
df1 <- as.data.frame(sapply(df1,as.character))
df2 <- t(as.data.frame(apply(df1,1, function(x) nchar(x))))
return(df2)
}
注意:使用内置函数名来命名自定义对象不是好的做法。所以我把df
改成了df1
。并且输出需要通过 t
转置以确认您所需的输出。
当我尝试将 sapply 函数应用于 data.frame 时,它不起作用并且出现此错误:
"Error in nchar(x) : 'nchar()' requires a character vector"
应用函数是:
as.data.frame(sapply(df,function(x) nchar(x)))
我的 test.data 框架是:
df<-data.frame(valor1=c("R$ 27.144,22"," 30.035,07 "," 30.761,40 "),valor2=c("17.935,85","13.741,63","19.090,80"),valor3=c("0,00","0,00","1"))
我不明白为什么会出现该错误,因为我已按如下方式正确格式化我的数据框
df <- as.data.frame(sapply(df,as.character))
如果每个元素都是旧 data.frame 中每个元素的字符数,那么我想要的结果是一个新的 data.frame。在我的测试 data.frame 示例中,那将是:
valor1 valor2 valor3
[1]12 9 4
[2]11 9 4
[3]11 9 1
答案就在错误警告中。 nchar
需要一个字符向量,sapply
这里不会提供(调试时,sapply
的输出是"factor"而不是"character")。您必须改用 apply
:
ncharsap <- function() {
df1 <-data.frame(valor1=c("R$ 27.144,22"," 30.035,07 "," 30.761,40 "),valor2=c("17.935,85","13.741,63","19.090,80"),valor3=c("0,00","0,00","1"))
df1 <- as.data.frame(sapply(df1,as.character))
df2 <- t(as.data.frame(apply(df1,1, function(x) nchar(x))))
return(df2)
}
注意:使用内置函数名来命名自定义对象不是好的做法。所以我把df
改成了df1
。并且输出需要通过 t
转置以确认您所需的输出。