创建data.frame
的两种不同方法会导致不同的结果:
a <- c(1,2)
b <- c(3,4)
df1 <- as.data.frame(cbind(a, b))
df1
str(df1)
mean(df1$a)
这很好但是:
a <- list(1,2)
b <- list(3,4)
df2 <- as.data.frame(cbind(a, b))
df2
str(df2)
mean(df2$a)
导致警告:
[1] NA
Warning message:
In mean.default(df2$a) : argument is not numeric or logical: returning NA
在将json文件解析为data.frame
时遇到此问题,我发现假设data.frame
列始终为vector
,我犯了一个错误,但它可能是{{ 1}}而不是。当它是list
时,不仅list
,mean
和summary
等许多其他功能都无法按预期工作。所以现在数据类型as.Date
对我来说不再“安全”,将data.frame
作为输入传递而不知道它是如何创建的意味着我需要明确地将其列转换为data.frame
可能是vector
和list
共存时更复杂的问题:
vector
所以我尝试将所有列转换为df3 <- df2
df3$a <- as.numeric(df3$a)
str(df3)
:
vector
但我发现它太冗长了,有没有更好的解决方案?
答案 0 :(得分:3)
您可以尝试:
data.frame(lapply(df3, unlist))
产地:
'data.frame': 2 obs. of 2 variables:
$ a: num 1 2
$ b: num 3 4