这可能是一个非常基本的问题,但我有一个数据框,X带有列名,数据框是所有数值,我试图总结所有行,但是当我查看其中一行时使用
X[1,]
例如,它不仅返回第一行中的数值,还返回每列的名称。所以这使得使用
rowSums(X[1,])
不可能,因为它不能将细胞识别为数值。
事实上,即使我看一个单独的细胞:
X[1,1]
它返回该单元格的数值以及该行:
213 Levels: 1.505 1.545 1.57 1.6 1.61 1.62 1.63 1.64 1.68 1.69 1.7 1.72 1.725 1.73 1.75 1.76 1.78 1.83 ... 922472(P)
所以我不确定如何制作它以便使用数据框更像是使用矩阵,我试过:
m<-as.matrix(X)
但这并不能解决我遇到的任何问题。
更新我不确定如何最好地提供数据的示例,因为它的大小,希望这没关系:
prices.names[1:5,1:5]
AWE ADELAIDE.BRIGHTON RAMSAY.HEALTH.CARE AUS.AND.NZ.BANKING.GP. AMCOR
1 1.8 1.7 7.0127 20.59 6.2342
2 1.75 1.75 7.19 20.62 6.2935
3 1.9 1.76 7.2491 20.34 6.2257
4 1.79 1.72 7.0423 20.2 6.0815
5 1.8 1.83 7.1014 20.55 6.0815
答案 0 :(得分:1)
Collection <- data.frame(A=seq(1,10), B=seq(11,20),C=seq(21,30))
rowSums(Collection[1,])
给出
1
33
它给出了行的总和和该行的名称。
虽然,
rowSums(Collection)
[1] 33 36 39 42 45 48 51 54 57 60
是你想要的吗?
答案 1 :(得分:1)
首先转换为数字矩阵,如果你想保留一般结构,你可以试试这个:
prices.names <- sapply(prices.names, function(r) as.numeric(as.character(r)))
如果你想要data.frame
,你可以将之前的电话打包在as.data.frame()
中,如下:
prices.names <- as.data.frame(sapply(prices.names, function(r) as.numeric(as.character(r))))
之后rowSums
应按预期工作:
> rowSums(prices.names[1,])
1
37.3369
> rowSums(prices.names)
[1] 37.3369 37.6035 37.4748 36.8338 37.3629
> apply(prices.names,1,sum)
[1] 37.3369 37.6035 37.4748 36.8338 37.3629
您也可以将此输出保存在对象中:
> rs <- rowSums(prices.names)
> rs[1]
[1] 37.3369
> rs[2]
[1] 37.6035
> rs[3]
[1] 37.4748
> rs[4]
[1] 36.8338
> rs[5]
[1] 37.3629