【问题标题】:Narrow format and adding columns with dplyr and tidyr窄格式并使用 dplyr 和 tidyr 添加列
【发布时间】:2015-08-04 23:58:56
【问题描述】:

我正在尝试使用 dplyr 和 tidyr 来格式化数据框。我想 转换这个数据框

df_ex1=data.frame(CODE=c("A","B","C"),
                  Red=c(11.4,10.9,11.4),
                  Blue=c(0.57,0.89,1.19),
                  Purple=c(0.40,3.50,"NA"))

#> df_ex1
#  CODE  Red Blue Purple
#1    A 11.4 0.57    0.4
#2    B 10.9 0.89    3.5
#3    C 11.4 1.19     NA

到这个数据框:

df_ex2=data.frame(CODE=c("A","B","C"),
                  TYPE=c("One","One","Two"),
                  PARAMETAR=c("Red","Blue","Purple"),
                   VALUE=c(11.4,0.57,0.4))

#> df_ex2
#  CODE TYPE PARAMETAR VALUE
#1    A  One       Red 11.40
#2    B  One      Blue  0.57
#3    C  Two    Purple  0.40

我知道我必须使用gather 函数,但我不知道添加列type,或者如何正确合并列。

有人可以告诉我怎么做吗?

【问题讨论】:

  • 你应该使用NA 而不是"NA"
  • 第一个变成第二个的解释是什么?
  • TYPE 值从何而来?我不明白为什么前两行是“一”,第三行是“二”。
  • @earino TYPE 值应该是添加到新数据框中的全新列。这个想法是紫色总是二,其他两个总是一。
  • 另一种方式是melt(df_ex1, measure.vars = c("Red", "Blue", "Purple"))melt来自reshape2,然后使用@Gregor答案的ifelse语句生成Type列。

标签: r dataframe dplyr tidyr


【解决方案1】:
library(tidyr)
df_long = gather(df_ex1, key = Parameter, value = Value, -CODE)

TYPE 值应该是添加到新数据框中的全新列。这个想法是紫色总是二,其他两个总是一

只需添加一个具有此定义的列:

df_long$TYPE = ifelse(df_long$Parameter == "Purple", "TWO", "ONE")

  df_long
#   CODE Parameter Value TYPE
# 1    A       Red  11.4  ONE
# 2    B       Red  10.9  ONE
# 3    C       Red  11.4  ONE
# 4    A      Blue  0.57  ONE
# 5    B      Blue  0.89  ONE
# 6    C      Blue  1.19  ONE
# 7    A    Purple   0.4  TWO
# 8    B    Purple   3.5  TWO
# 9    C    Purple    NA  TWO

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-02-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-07-05
    • 2016-06-05
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多