"apply"文档提到"在哪里'X'命名为dimnames,它可以是一个选择维名称的字符向量." 我想在data.frame上仅对特定列使用apply.我可以使用dimnames功能来执行此操作吗?
我意识到我可以将subset()X只包含感兴趣的列,但我想更好地理解"命名的dimnames".
以下是一些示例代码:
> x <- data.frame(cbind(1,1:10))
> apply(x,2,sum)
X1 X2
10 55
> apply(x,c('X2'),sum)
Error in apply(x, c("X2"), sum) : 'X' must have named dimnames
> dimnames(x)
[[1]]
[1] "1" "2" "3" "4" "5" "6" "7" "8" "9" "10"
[[2]]
[1] "X1" "X2"
> names(x)
[1] "X1" "X2"
> names(dimnames(x))
NULL
Run Code Online (Sandbox Code Playgroud)
如果我理解正确,您只想在某些列上使用 apply 。这不是命名的暗名所能实现的。矩阵或 data.frame 上的 apply 函数始终适用于所有行或所有列。命名的 dimnames 允许您选择按名称使用行或列,而不是“正常”1和2:
m <- matrix(1:12,4, dimnames=list(foo=letters[1:4], bar=LETTERS[1:3]))
apply(m, "bar", sum) # Use "bar" instead of 2 to refer to the columns
Run Code Online (Sandbox Code Playgroud)
但是,如果您有想要应用的列名称,则可以通过首先仅选择这些列来实现:
n <- c("A","C")
apply(m[,n], 2, sum)
# A C
#10 42
Run Code Online (Sandbox Code Playgroud)
matrix命名的暗名称是暗名称作为列表存储在 a或中的“dimnames”属性中的副作用array。列表的每个组件对应一个维度并且可以命名。这对于多维数组可能更有用......
对于 a data.frame,没有“dimnames”属性。Adata.frame本质上是一个列表,因此列表的“names”属性对应于列名称,额外的“row.names”属性对应于行名称。因此,没有地方可以存储暗名称的名称(当然它们可以有一个额外的属性,但他们没有)。dimnames当您在 data.frame 上调用该函数时,它只是根据“row.names”和“names”属性创建一个列表。
| 归档时间: |
|
| 查看次数: |
6140 次 |
| 最近记录: |