R 根据相应的行标签将行值放置到列中

R 根据相应的行标签将行值放置到列中,r,R,我在一个数据框中有两列,一列是“直径”,另一列是“灰烬”。我正试图根据ash列中的标签将两列转换为几列。这应该很简单,但我已经很久没有使用R了 X Diameter Ash 1 0.566176 Apache 2 0.588312 Apache 3 0.590499 Tolk 4 0.607365 Belle Isle 5 0.631185 Tolk 我希望它看起来像: X Apache Belle Isle Tolk 1 0.566 0.607 0.590 2 0.588

我在一个数据框中有两列,一列是“直径”,另一列是“灰烬”。我正试图根据ash列中的标签将两列转换为几列。这应该很简单,但我已经很久没有使用R了

X Diameter Ash  
1 0.566176 Apache
2 0.588312 Apache
3 0.590499 Tolk
4 0.607365 Belle Isle
5 0.631185 Tolk
我希望它看起来像:

X Apache Belle Isle Tolk
1 0.566  0.607      0.590
2 0.588  N/A        0.631

您可以先将数据帧更改为矩阵,然后使用转置函数,但这可能不是您想要的,因为这样每个条目都会强制为字符串值。由于您的数据帧非常小,我建议您采用以下最简单的方式:

rbind(df$Ash, df$Diameter)

其中df是数据帧的名称

您可以先将数据帧更改为矩阵,然后使用转置函数,但这可能不是您想要的,因为这样每个条目都会强制为字符串值。由于您的数据帧非常小,我建议您采用以下最简单的方式:

rbind(df$Ash, df$Diameter)

其中df是数据帧的名称

我的解决方案按Ash对数据进行分组,使用row_number()创建一个新变量,然后传播数据

library(tidyverse)

x <- tibble(X= c(1:5),
            Diameter = c(0.56,0.58,0.59,0.60,0.63),
            Ash = c("Apache", "Apache", "Tolk", "Belle Isle","Tolk"))

df_2 <- x %>%select(-X) %>%
    arrange(Ash) %>%
    group_by(Ash) %>%
    mutate(row = row_number()) %>% 
    spread(Ash, Diameter)

df_2
库(tidyverse)
x%
排列(灰分)%>%
组别按(灰分)%>%
变异(行=行编号())%>%
摊铺(灰分、直径)
df_2

我的解决方案按Ash对数据进行分组,使用row_number()创建一个新变量,然后传播数据

library(tidyverse)

x <- tibble(X= c(1:5),
            Diameter = c(0.56,0.58,0.59,0.60,0.63),
            Ash = c("Apache", "Apache", "Tolk", "Belle Isle","Tolk"))

df_2 <- x %>%select(-X) %>%
    arrange(Ash) %>%
    group_by(Ash) %>%
    mutate(row = row_number()) %>% 
    spread(Ash, Diameter)

df_2
库(tidyverse)
x%
排列(灰分)%>%
组别按(灰分)%>%
变异(行=行编号())%>%
摊铺(灰分、直径)
df_2

我们可以使用
扩展
功能

data2 <- data %>% 
  spread(key=Ash, value=Diameter)
输出:

  X   Apache Belle.Isle     Tolk
1 1 0.566176   0.607365 0.590499
2 2 0.588312         NA 0.631185

我们可以使用
spread
函数

data2 <- data %>% 
  spread(key=Ash, value=Diameter)
输出:

  X   Apache Belle.Isle     Tolk
1 1 0.566176   0.607365 0.590499
2 2 0.588312         NA 0.631185

plyr
ldply
split

df=plyr::ldply(split(x$Diameter,x$Ash), rbind)
row.names(df)=df$.id
df$.id=NULL
df=data.frame(t(df))
df
  Apache Belle.Isle Tolk
1   0.56        0.6 0.59
2   0.58         NA 0.63

plyr
ldply
split

df=plyr::ldply(split(x$Diameter,x$Ash), rbind)
row.names(df)=df$.id
df$.id=NULL
df=data.frame(t(df))
df
  Apache Belle.Isle Tolk
1   0.56        0.6 0.59
2   0.58         NA 0.63

令人惊叹的!谢谢你的回复,太棒了!感谢您的回复。另外,实际数据列的长度为50000行,这就是我没有手动执行此操作的原因。另外,实际数据列的长度为50000行,这也是我没有手动执行此操作的原因。