【问题标题】:Long to wide with a unique ID based on the count of the transformed variable [duplicate]长到宽,具有基于转换变量计数的唯一 ID [重复]
【发布时间】:2020-08-02 19:30:57
【问题描述】:

我有这个数据是宽格式的,s02的宽度最多占据三个,即0,1,2

id_1<-c(1,2,2,2)
s02_0<-c(1,1,4,7)
s02_1<-c(2,2,5,8)
s02_2<-c(3,3,6,9)
id_2<-c(1,1,2,3)

我希望重塑我的数据,并创建一个额外的列 n,它显示每个给定行中 's02_' 占据的位置。 我的预期输出如下

id_1<-c(1,1,1,2,2,2,2,2,2,2,2,2)
s02<-c(1,2,3,1,2,3,4,5,6,7,8,9)
n<-c(1,2,3,1,2,3,1,2,3,1,2,3)
df2<-data.frame(id_1,s02,n)

【问题讨论】:

  • 这是您的第四个问题(1234)标记为 long-integerwidechar,但是您提供的数据与“大”整数无关,根本没有字符串(比 utf-8 少得多)。请不要包含不相关的标签,看起来您只是为了提高知名度而包含它们。当然还有更相关的标签可以找到(可能是reshapedata.frame?)。
  • Stack 标签推荐系统很不错,但可以在不合逻辑的标签中找到相关性,花点时间查看它们,即使是对您问题的提交后修订。您可以将鼠标悬停在每个标签上以查看简要说明;虽然有些标签没有描述,但您在此处拥有的标签 ,并且似乎不适用于您的问题/问题。
  • 谢谢你,我正在寻求将我的数据从宽转换为长,并增加一列用于计数。下次我会小心的。包括逻辑标签
  • 感谢您的编辑!为清楚起见,reshape2 非常具体地指代 R 中的 reshape2 包,而 reshape 标签更通用的是关于将数据从一种布局转换为另一种布局的过程(例如,wide-长)。我认为这两个标签经常被同一个人查看,但是通过包含reshape2,您暗示您想使用该软件包,而我认为可行的答案可能会推荐tidyr::pivot_longerdata.table::melt.

标签: r reshape


【解决方案1】:

这是一个几乎是单行的 tidyverse 版本:

library(tidyr)
pivot_longer(select(df1, -id_2), starts_with("s02_"),
             names_to = "n", names_prefix = "s02_", values_to = "s02")
# # A tibble: 12 x 3
#     id_1 n       s02
#    <dbl> <chr> <dbl>
#  1     1 0         1
#  2     1 1         2
#  3     1 2         3
#  4     2 0         1
#  5     2 1         2
#  6     2 2         3
#  7     2 0         4
#  8     2 1         5
#  9     2 2         6
# 10     2 0         7
# 11     2 1         8
# 12     2 2         9

注意:这个n是从0开始的,因为它的值是从列名s02_0s02_1s02_2派生而来的;这可以通过一些后处理来解决(例如,转换为整数、加一、可选地转换回字符),例如

library(dplyr)
pivot_longer(select(df1, -id_2), starts_with("s02_"),
             names_to = "n", names_prefix = "s02_", values_to = "s02") %>%
  mutate(n = as.integer(n) + 1L)
# # A tibble: 12 x 3
#     id_1     n   s02
#    <dbl> <int> <dbl>
#  1     1     1     1
#  2     1     2     2
#  3     1     3     3
#  4     2     1     1
#  5     2     2     2
#  6     2     3     3
#  7     2     1     4
#  8     2     2     5
#  9     2     3     6
# 10     2     1     7
# 11     2     2     8
# 12     2     3     9

【讨论】:

  • 亲爱的@r2evans,您能在这里协助我更新的问题吗? stackoverflow.com/questions/63209019/… 谢谢
  • 抱歉,现在无法处理。 (如果它不适合你,为什么会被接受?)
猜你喜欢
  • 2012-12-27
  • 1970-01-01
  • 1970-01-01
  • 2018-02-17
  • 1970-01-01
  • 1970-01-01
  • 2020-04-25
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多