【问题标题】:'varying' arguments must be the same length“可变”参数的长度必须相同
【发布时间】:2020-11-11 23:46:15
【问题描述】:

我有一个宽格式的纵向数据,我正在尝试将其转换为长格式:

#I have a wide data which look like this:
dat_wide <- read.table(text="
cid dyad f1 f2  op2 ed1 junk 
1   2    0  0   4   5   0.876
1   5    0  1   4   4   0.765
", header=TRUE)
#I want to convert it to long like this:
dat_long <- read.table(text="
cid dyad f op  ed junk  Visit
1   2    0 NA  5  0.876 1
1   2    0 4   NA 0.876 2
1   5    0 NA  4  0.765 1
1   5    1 4   NA 0.765 2 
", header=TRUE)

#R code I was trying:
dat_l2 = reshape(dat_wide,idvar='cid',  varying=list(c('f1','f2'), 'op2','ed1'),
                 #timevar='Visit',
                 times=c(1,2),
                 v.names=c('f','op','ed'),
                 direction='long') 
#gives error:Error in reshape(merge_wide1, idvar = "cid", varying = c("f1",  : length of 'v.names' does not evenly divide length of 'varying'

类似于Converting data from wide to long (using multiple columns)

我的数据的不同之处在于:我有一些变量只记录了更少的时间点。例如,变量“f”是从时间 1 和时间 2 记录的,但变量“op”仅记录时间 2(即 op2)& 变量“ed”仅记录时间 1(即 ed1) 头部(数据)

【问题讨论】:

    标签: r reshape


    【解决方案1】:

    你可以从tidyr 使用pivot_longer

    tidyr::pivot_longer(dat_wide, 
                        cols = f1:ed1, 
                        names_to = c('.value', 'Visit'), 
                        names_pattern = '(.*)(\\d+)')
    
    #    cid  dyad  junk Visit     f    op    ed
    #  <int> <int> <dbl> <chr> <int> <int> <int>
    #1     1     2 0.876 1         0    NA     5
    #2     1     2 0.876 2         0     4    NA
    #3     1     5 0.765 1         0    NA     4
    #4     1     5 0.765 2         1     4    NA
    

    【讨论】:

    • 这解决了我在这里问的问题。谢谢你罗纳克!但是,不知何故,它不适用于我拥有的更大数据。给出错误:“[.data.frame(data, unique(names(data))) 中的错误:选择了未定义的列”我知道如果不查看实际数据但有任何解决方案会很困难?
    • @nnet names_pattern 在这里很重要。您需要确保列名遵循与示例中所示相同的模式,如果不是,我们可能需要更改我们的正则表达式。
    • 尝试将names_pattern 用作names_pattern = '(.*?)(\\d+)'。您能否提供一个可重现的真实数据示例?
    • 如果您可以分享应该提供很多线索的数据名称。 dput(names(dataframe_name))
    • 我可以看到您有NA 作为列名。您能否删除该列,然后检查答案是否适合您。
    猜你喜欢
    • 2018-11-04
    • 1970-01-01
    • 1970-01-01
    • 2019-12-19
    • 1970-01-01
    • 2019-05-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多