簡體   English   中英

將行旋轉到單個列中,並使用R中的列名稱對其進行索引

[英]Pivot rows into a single column and index them using column names in R

我需要將行值翻轉為單列,然后根據列名和行號創建索引。 我在R中檢查了很多樞軸解決方案,但是似乎沒有一個解決方案可以簡單地翻轉而不創建平均值,總和等。幫助將不勝感激。

df1 <- read.table(textConnection("a1,a2,a3
23,34,4
34,44,98"), sep=",", header=TRUE)

df2 <- read.table(textConnection("id,val
1_a1,23
2_a2,34
3_a3,4
4_a1,34
5_a2,44
6_a3,98"), sep=",", header=TRUE)

我需要從如下所示的數據幀開始:

  a1 a2 a3
1 23 34  4
2 34 44 98

對此:

    id val
1 1_a1  23
2 2_a2  34
3 3_a3   4
4 4_a1  34
5 5_a2  44
6 6_a3  98

非常感謝!!

這很容易做到與gather來自tidyr包:

library(tidyr)
df2 <- gather(df1, id, val)

注意,在提交之后,這需要tidyr的最新開發版本-您可以使用devtools::install_github("hadley/tidyr") 否則,您可以將行更改為gather(df1, id, val, a1:a3)

要添加1_2_等,您可以執行以下操作:

df2$id <- paste(df2$id, 1:nrow(df2), sep = "_")

如果還使用dplyr軟件包,則可以執行以下操作:

library(dplyr)
library(tidyr)
df2 <- df1 %>% gather(id, val) %>% mutate(id = paste(id, seq_len(n()), sep = "_"))

你可以試試

m1 <- t(df1)
d1 <- data.frame(id=paste(seq_along(m1), 
        rownames(m1)[row(m1)], sep="_"), val=c(m1))

 d1
 #   id val
 #1 1_a1  23
 #2 2_a2  34
 #3 3_a3   4
 #4 4_a1  34
 #5 5_a2  44
 #6 6_a3  98
require(dplyr) # for mutate()
require(tidyr) # for gather()

d <- data.frame(
  a1 = c(23, 34),
  a2 = c(34, 44),
  a3 = c(4, 98)
  )

gather(d, id, val, a1:a3) %>%
  mutate(id = paste(row_number(), "id", sep = "_"))

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM