查看R数据框对象中的每一行时出现列标题

时间:2015-09-23 08:40:26

标签: r dataframe

这可能是一个非常基本的问题,但我有一个数据框,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

2 个答案:

答案 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