【问题标题】:Arrange values using duplicate column values使用重复的列值排列值
【发布时间】:2019-02-28 16:48:09
【问题描述】:

这是我在 csv 中并在 R 中导入的示例数据。

Rowid   parcel no           crop    area    Area insured
1             122         cotton     0.9            1.2
2             111           soya     0.8            1.1
3             111         cotton     1.2            1.6
4              23           soya     0.7            1.5
5              45         cotton    0.23            1.3
6              45           soya     1.6            1.0

我想把它安排成

parcel no       crop    area    Area insured     crop   area.   Area insured
122           cotton     0.9            1.2         
111             soya     0.8            1.1      cotton 1.2      1.6
23              soya     0.7            1.5         
45            cotton    0.23            1.3      soya   1.6      .01

我在徘徊我怎样才能达到上述结果。有没有可能在 R 中做到这一点?我有一个非常庞大的数据要这样排列

【问题讨论】:

  • 我尝试为您格式化您的数据,因为没有应用格式化(编写/编辑问题为您提供了格式化为代码的选项,您应该这样做),但实际上无法告诉这些列应该如何排列。从一个版本转到下一个版本的逻辑是什么?
  • 是的,我知道代码格式,但我不知道数据排列。这与问题的研究影响无关。您已将其标记为否定。
  • 逻辑是包裹号。行号相同。 3和6。我想根据那些包裹号来排列数据。如示例输出所示,这对于棉花和大豆作物很常见。
  • 当然,格式不是什么大问题。但是您的问题没有明确解释您要做什么,您如何尝试从一个步骤到下一步(尝试创建宽形数据,但没有额外的列名......? ),或者到目前为止您编写的代码还没有工作。看看写个reproducible R example

标签: r dataframe matrix


【解决方案1】:

解决此问题的一种方法是提取具有重复宗地的行,然后合并。我这样做是为了一个最小的例子:

df<-data.frame(c(11,11,12,13,13),c("a","b","c","d","a"))
names(df)<-c("parcel","crop")
df1<-df[duplicated(df$parcel),]
df2<-df[!duplicated(df$parcel),]
merge(df2,df1,by="parcel",all.x=T,all.y=T)

你得到输出

  parcel crop.x crop.y
1     11      a      b
2     12      c   <NA>
3     13      d      a

在您的示例中,NA 代表一个空单元格。这能解决您的问题吗?

【讨论】:

  • 感谢@tarion。这是按一列获取排列数据的好方法。我应用了这种方法并使行与包裹编号对齐。柱子。现在我希望根据我的要求对数据进行排序。再次感谢。
  • 不客气。如果您觉得有帮助,请考虑接受答案(勾选复选标记符号)。和/或您可以考虑按照 camille 的建议构建一个可重现的示例以获得更多答案。
猜你喜欢
  • 1970-01-01
  • 2021-06-30
  • 2014-05-06
  • 1970-01-01
  • 1970-01-01
  • 2018-01-12
  • 2020-02-18
  • 2021-11-22
  • 1970-01-01
相关资源
最近更新 更多