我只是习惯于作为一个单元/记录行,并想知道为什么它是面向列的。或者,如果我误解了某些内容,请善意提出建议。
我原以为数据帧是一系列行,例如(Ozone,Solar.R,Wind,Temp,Month,Day)。
> c ## data frame created from read.csv()
Ozone Solar.R Wind Temp Month Day
1 41 190 7.4 67 5 1
2 36 118 8.0 72 5 2
3 12 149 12.6 74 5 3
4 18 313 11.5 62 5 4
7 23 299 8.6 65 5 7
8 19 99 13.8 59 5 8
> typeof(c)
[1] "list"
但是当对c应用lapply()来显示每个列表元素时,它就是一列。
> lapply(c, function(arg){ return(arg) })
$Ozone
[1] 41 36 12 18 23 19
$Solar.R
[1] 190 118 149 313 299 99
$Wind
[1] 7.4 8.0 12.6 11.5 8.6 13.8
$Temp
[1] 67 72 74 62 65 59
$Month
[1] 5 5 5 5 5 5
$Day
[1] 1 2 3 4 7 8
虽然我曾预料到
[1] 41 190 7.4 67 5 1
[1] 36 118 8.0 72 5 2
…
答案 0 :(得分:4)
1) R中的数据框是列的列表吗?
是。
df <- data.frame(a=c("the", "quick"), b=c("brown", "fox"), c=1:2)
is.list(df) # -> TRUE
attr(df, "name") # -> [1] "a" "b" "c"
df[[1]][2] # -> "quick"
2) R中的设计决策是什么使数据框架成为面向列(不是面向行)的结构?
data.frame是列向量的列表。
is.atomic(df[[1]]) # -> TRUE
mode(df[[1]]) # -> [1] "character"
mode(df[[3]]) # -> [1] "numeric"
矢量只能存储一种物体。 A&#34;面向行&#34; data.frame将要求数据帧由列表组成。现在想象一下像
这样的操作的性能df[[1]][20000]
将位于基于列表的数据框中,记住随机访问对于向量是O(1),对于列表是O(n)。
3)任何对相关设计文档或数据结构设计文章的引用都将不胜感激。