繁体   English   中英

使用R将信息组合成一行

[英]Using R to combine information into one row

我有一个有 5 列的表(ID、var、state、loc 和 position)。 var 列包含某个变体的描述,例如 var1。 在表中有多个行,其中包括 var 1,但它们具有不同的 state 和 position。 我想要做的是创建一个新表,其中每个 var 仅包含一次,并且 position 基于其 state 包含在两列中。

例如,假设我有四个 var1 行; 两个使用 state H,两个使用 state h。 在新表中,我需要的列是:sample - var - loc - position 如果 H 和 position 如果 h - 这样 var 1 的所有信息都在一行中。 我需要能够为原始数据集中的每个变体执行此操作。

当前数据示例

structure(list(ID = c(1234L, 1234L, 1234L, 1234L, 5678L, 5678L, 
NA, NA, NA, NA), var = c("var1", "var1", "var1", "var1", "var2", 
"var2", NA, NA, NA, NA), state = c("H", "H", "h", "h", "H", "h", 
NA, NA, NA, NA), loc = c(4L, 4L, 4L, 4L, 12L, 12L, NA, NA, NA, 
NA), position = c(6000L, 6002L, 6004L, 6006L, 3002L, 3004L, NA, 
NA, NA, NA)), row.names = c("1", "2", "3", "4", "5", "6", "NA", 
"NA.1", "NA.2", "NA.3"), class = "data.frame")

想要的格式

structure(list(V1 = c("ID", "1234", "5678", NA, NA, NA, NA, NA, 
NA, NA), V2 = c("var1", "var1", "var2", NA, NA, NA, NA, NA, NA, 
NA), V3 = c("loc", "4", "12", NA, NA, NA, NA, NA, NA, NA), V4 = c("state H", 
"6000 6002", "3002", NA, NA, NA, NA, NA, NA, NA), V5 = c("state h", 
"6004 6006", "3004", NA, NA, NA, NA, NA, NA, NA)), row.names = c("1", 
"2", "3", "NA", "NA.1", "NA.2", "NA.3", "NA.4", "NA.5", "NA.6"
), class = "data.frame")

任何指导将不胜感激

您的问题的答案可能围绕tidyr::pivot_wider

我更改了示例数据,因为我相信您的数据不一致。

数据

df<-structure(list(ID = c(1234L, 1234L, 1234L, 1234L, 5678L, 5678L
), var = c("var1", "var1", "var1", "var1", "var2", "var2"), state = c("H", 
"H", "h", "h", "H", "h"), loc = c(4L, 4L, 4L, 4L, 12L, 12L), 
    position = c(6000L, 6002L, 6004L, 6006L, 3002L, 3004L)), row.names = c("1", 
"2", "3", "4", "5", "6"), class = "data.frame")

df

    ID  var state loc position
1 1234 var1     H   4     6000
2 1234 var1     H   4     6002
3 1234 var1     h   4     6004
4 1234 var1     h   4     6006
5 5678 var2     H  12     3002
6 5678 var2     h  12     3004

回答

library(tidyr)

df %>% pivot_wider(names_from = state,
                   values_from = position,
                   values_fn = toString)

# A tibble: 2 × 5
     ID var     loc H          h         
  <int> <chr> <int> <chr>      <chr>     
1  1234 var1      4 6000, 6002 6004, 6006
2  5678 var2     12 3002       3004    

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM