【问题标题】:R create table from 3 columns [duplicate]R从3列创建表[重复]
【发布时间】:2016-10-27 20:50:24
【问题描述】:

我在这方面失败了大约 10 种方法:

我有一个格式化为 3 列的数据:

H7  200,3   2227649,5
H13 200,3   1084585
H15 200,3   873123,1
Zdrowy  200,3   2245707
Z26 202,7   1742185,9
Zdrowy  202,7   2420348,5
K4  203,5   10251587
Z18 203,5   6904013
H7  203,5   5765803
H13A    203,5   4219047,5
H13 203,5   1791847,1
H15 203,5   1260959,3
K3  203,5   9878843
K5  203,5   3406241
K35 203,5   4746493
K37 203,5   6303874
Z11 203,5   1415927,8
Z16 203,5   6245137,5
Z26 203,5   7330417,5

第 1 列和第 2 列确实包含不唯一的值。我需要做的是获得一个矩阵,其中 column1 作为行名,column2 作为列名,column3 作为单元格中的相应值。如果值重复(因为第 1,2 列有一些非唯一值)单元格值应该是平均值。

有什么帮助吗?

【问题讨论】:

  • 如果 col 2 是列名,col 3 是值,但 col 1 成为行名,这是否意味着除第 1 行之外的其余行将是空白/NA?
  • 我没听懂你的评论。 NA 将是那些在所有 column2 值中给定 column1 没有任何 column3 的单元格。将上面的数据传递到: library(tidyr) ee

标签: r


【解决方案1】:

听起来您正在尝试将数据从长格式转换为宽格式。您可以使用包 reshape2 来做到这一点。这是一个小例子:

# Create dummy data
df <- data.frame(col1=sample(c('a','b','c'), 10, replace=T), col2=sample(1:3, 10, replace=T), col3=rnorm(10))
df
   col1 col2       col3
1     b    2  0.1514541
2     c    3 -0.2566596
3     a    3 -0.8939474
4     a    1 -0.2174930
5     a    1 -0.1739861
6     b    1 -0.4525370
7     b    2 -0.5592760
8     b    3  0.5206133
9     a    2 -1.9239337
10    c    2 -0.1581582

# Load the library
library(reshape2)

# Cast the library into wide format
df.long <- dcast(df, col1~col2, fun.aggregate=mean)
df.long
col1          1          2
1    a -0.1957395 -1.9239337
2    b -0.4525370 -0.2039110
3    c        NaN -0.1581582
           3
1 -0.8939474
2  0.5206133
3 -0.2566596

如果第 1 列和第 2 列中的某些因子组合不存在值,则会插入 NaN。

【讨论】:

  • 正是我需要的,非常感谢!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-11-14
  • 2020-04-12
  • 1970-01-01
  • 2021-12-05
  • 2016-10-21
  • 1970-01-01
  • 2020-01-25
相关资源
最近更新 更多