为数据框中的每一行添加列名

时间:2015-10-31 22:36:38

标签: r dataframe

我想将列名添加为与该列关联的行的参数条目。这就是我的尝试:

x <- matrix(c(101:104,101:104,105:106,1,2,3,3,4,5,4,5,7,5), nrow=10, ncol=2) 

     V1   V2
 1  101    1
 2  102    2
 3  103    3
 4  104    3
 5  101    4
 6  102    5
 7  103    4
 8  104    5
 9  105    7
10  106    5

转换为表格:

as.data.frame(table(x))

这给了我:

     x Freq
1    1    1
2    2    1
3    3    2
4    4    2
5    5    3
6    7    1
7  101    2
8  102    2
9  103    2
10 104    2
11 105    1
12 106    1

我应该怎么做才能得到这个:

    V Val Freq
1  V2   1    1
2  V2   2    1
3  V2   3    2
4  V2   4    2
5  V2   5    3
6  V2   7    1
7  V1 101    2
8  V1 102    2
9  V1 103    2
10 V1 104    2
11 V1 105    1
12 V1 106    1

我对R比较陌生。所以,如果有其他方法我可以使用,请告诉我。

3 个答案:

答案 0 :(得分:3)

您没有将任何列名称添加到原始矩阵x开头。矩阵不会像数据框那样自动带有列名。但是没关系,我们可以使用矢量来模拟它们。然后我们可以将tabled值与模拟列名匹配。

a <- as.data.frame(table(x))
cbind(V = c("V1", "V2")[col(x)[match(a$x, x)]], a)
#     V   x Freq
# 1  V2   1    1
# 2  V2   2    1
# 3  V2   3    2
# 4  V2   4    2
# 5  V2   5    3
# 6  V2   7    1
# 7  V1 101    2
# 8  V1 102    2
# 9  V1 103    2
# 10 V1 104    2
# 11 V1 105    1
# 12 V1 106    1

答案 1 :(得分:3)

您也可以使用包:

library(data.table)
melt(as.data.table(x), measure.vars=1:2)[, .N, by = .(variable, value)]

给出了期望的结果:

    variable value N
 1:       V1   101 2
 2:       V1   102 2
 3:       V1   103 2
 4:       V1   104 2
 5:       V1   105 1
 6:       V1   106 1
 7:       V2     1 1
 8:       V2     2 1
 9:       V2     3 2
10:       V2     4 2
11:       V2     5 3
12:       V2     7 1

答案 2 :(得分:1)

试试这个:

pt1<-data.frame(V="V1",table(x[,1]))
pt2<-data.frame(V="V2",table(x[,2]))
final<-rbind(pt1,pt2)

编辑:

countcols<-function(df) {
  colname<-colnames(df)
  # create empty dataframe with structure we want
  counts<-data.frame(V="temp",table(df[,1]))[0,]
for (i in colname) {
  counts<-rbind(counts,data.frame(V=i,table(df[,i])))
}
  return(counts)
}

请记住,您需要为对象命名。

countcols(x)给出Tidy输出中每列的计数

编辑:

> pander::pander(countcols(mtcars))

------------------
 V    Var1   Freq 
---- ------ ------
mpg   10.4    2   

mpg   13.3    1   

mpg   14.3    1   

mpg   14.7    1   

mpg    15     1   

mpg   15.2    2   

mpg   15.5    1   

mpg   15.8    1   

mpg   16.4    1   

mpg   17.3    1   

mpg   17.8    1   

mpg   18.1    1   

mpg   18.7    1   

mpg   19.2    2   

mpg   19.7    1   

mpg    21     2   

mpg   21.4    2   

mpg   21.5    1   

mpg   22.8    2   

mpg   24.4    1   

mpg    26     1   

mpg   27.3    1   

mpg   30.4    2   

mpg   32.4    1   

mpg   33.9    1   

cyl    4      11  

cyl    6      7   

cyl    8      14  

disp  71.1    1   

disp  75.7    1   

disp  78.7    1   

disp   79     1   

disp  95.1    1   

disp  108     1   

disp 120.1    1   

disp 120.3    1   

disp  121     1   

disp 140.8    1   

disp  145     1   

disp 146.7    1   

disp  160     2   

disp 167.6    2   

disp  225     1   

disp  258     1   

disp 275.8    3   

disp  301     1   

disp  304     1   

disp  318     1   

disp  350     1   

disp  351     1   

disp  360     2   

disp  400     1   

disp  440     1   

disp  460     1   

disp  472     1   

 hp    52     1   

 hp    62     1   

 hp    65     1   

 hp    66     2   

 hp    91     1   

 hp    93     1   

 hp    95     1   

 hp    97     1   

 hp   105     1   

 hp   109     1   

 hp   110     3   

 hp   113     1   

 hp   123     2   

 hp   150     2   

 hp   175     3   

 hp   180     3   

 hp   205     1   

 hp   215     1   

 hp   230     1   

 hp   245     2   

 hp   264     1   

 hp   335     1   

drat  2.76    2   

drat  2.93    1   

drat   3      1   

drat  3.07    3   

drat  3.08    2   

drat  3.15    2   

drat  3.21    1   

drat  3.23    1   

drat  3.54    1   

drat  3.62    1   

drat  3.69    1   

drat  3.7     1   

drat  3.73    1   

drat  3.77    1   

drat  3.85    1   

drat  3.9     2   

drat  3.92    3   

drat  4.08    2   

drat  4.11    1   

drat  4.22    2   

drat  4.43    1   

drat  4.93    1   

 wt  1.513    1   

 wt  1.615    1   

 wt  1.835    1   

 wt  1.935    1   

 wt   2.14    1   

 wt   2.2     1   

 wt   2.32    1   

 wt  2.465    1   

 wt   2.62    1   

 wt   2.77    1   

 wt   2.78    1   

 wt  2.875    1   

 wt   3.15    1   

 wt   3.17    1   

 wt   3.19    1   

 wt  3.215    1   

 wt  3.435    1   

 wt   3.44    3   

 wt   3.46    1   

 wt   3.52    1   

 wt   3.57    2   

 wt   3.73    1   

 wt   3.78    1   

 wt   3.84    1   

 wt  3.845    1   

 wt   4.07    1   

 wt   5.25    1   

 wt  5.345    1   

 wt  5.424    1   

qsec  14.5    1   

qsec  14.6    1   

qsec 15.41    1   

qsec  15.5    1   

qsec 15.84    1   

qsec 16.46    1   

qsec  16.7    1   

qsec 16.87    1   

qsec  16.9    1   

qsec 17.02    2   

qsec 17.05    1   

qsec  17.3    1   

qsec  17.4    1   

qsec 17.42    1   

qsec  17.6    1   

qsec 17.82    1   

qsec 17.98    1   

qsec   18     1   

qsec  18.3    1   

qsec 18.52    1   

qsec  18.6    1   

qsec 18.61    1   

qsec  18.9    2   

qsec 19.44    1   

qsec 19.47    1   

qsec  19.9    1   

qsec   20     1   

qsec 20.01    1   

qsec 20.22    1   

qsec  22.9    1   

 vs    0      18  

 vs    1      14  

 am    0      19  

 am    1      13  

gear   3      15  

gear   4      12  

gear   5      5   

carb   1      7   

carb   2      10  

carb   3      3   

carb   4      10  

carb   6      1   

carb   8      1   
------------------