【问题标题】:How to get unique row names in ONE column?如何在 ONE 列中获取唯一的行名?
【发布时间】:2022-01-01 19:38:15
【问题描述】:

我有一个大数据框作为“数据”,让我们考虑一下:

`data <- data.frame(DATE = c(2012, 2012, 2013, 2014, 2014, 2015),
             NAME = c("A", "G", "N", "L",'L' "L"),
             LCR = c(1, 3, 5, 4, 5, 1),
             MWFR=c(0,0,0,0,0,0,1,1),
             reg=c(1,1,0,0,1,1,1,1))
 

我想运行回归,但运行时出现此错误:

pdata <- pdata.frame(data, index = c("NAME", "DATE"))
regmodelfix<- plm(LCR ~ MWFR+reg+ MWFR*reg , model ='within',data=pdata, effect = 'twoways')

error :duplicate 'row.names' are not allowed
In addition: Warning message:
non-unique values when setting

我意识到我需要在 NAME 和 DATE 列的每一行中创建唯一的名称,所以我尝试了 make.names

rownames(data) <- make.names(data$NAME, unique = TRUE)

但它不起作用!有什么想法吗?

【问题讨论】:

  • 您的问题不可重现,因为您没有包含重现问题的数据集,但您可以尝试先将行名复制到临时列 rownames(data) -&gt; data$tempname,然后删除它们 rownames(data) &lt;- NULL .
  • 我不想删除只是想重命名的行
  • rownames(data) &lt;- NULL 不删除行,只删除它们的名称。
  • 您的问题与行名(数据)有关,与数据$NAME 或数据$DATE 无关。您可以通过例如重命名 data$NAME 列data$NAME
  • @OttoKässi rownames(data) &lt;- NULL 不会删除行名,它会删除并使用强制转换为字符的连续整数重新创建它们。它保证唯一的行名,就像 OP 想要的那样。 rownames(data) &lt;- NULL解决方案。

标签: r plm


【解决方案1】:

原帖中的代码不可重现。 我提供了一个可重现的示例并强调以下问题:

data <- data.frame(DATE = c(2012, 2012, 2013, 2014, 2014, 2015),
                   NAME = c("A", "G", "N", "L",'L', "L"),
                   LCR  = c(1,    3,   5,   4,  5,   1),
                   MWFR = c(0,    0,   0,   0,  0,   1),
                   reg  = c(1,    1,   0,   0,  1,   1))

library(plm)
pdata <- pdata.frame(data, index = c("NAME", "DATE"))
#> Warning in pdata.frame(data, index = c("NAME", "DATE")): duplicate couples (id-time) in resulting pdata.frame
#>  to find out which, use, e.g., table(index(your_pdataframe), useNA = "ifany")

# use hint given by the warning from pdata.frame
table(index(pdata), useNA = "ifany")
#>     DATE
#> NAME 2012 2013 2014 2015
#>    A    1    0    0    0
#>    G    1    0    0    0
#>    L    0    0    2    1
#>    N    0    1    0    0

该表表明,对于 Name = L,面板数据集中包含 Date = 2014 的两个条目。面板数据中不允许这些重复的 id-time 对,因为标识符(由两个维度 id 和 time 组合而成)在数据集中必须是唯一的。

这也可以在直接查看数据时检测到,但更难发现,并且对于大型数据集不实用:

print(data)
#>   DATE NAME LCR MWFR reg
#> 1 2012    A   1    0   1
#> 2 2012    G   3    0   1
#> 3 2013    N   5    0   0
#> 4 2014    L   4    0   0
#> 5 2014    L   5    0   1
#> 6 2015    L   1    1   1

【讨论】:

    猜你喜欢
    • 2016-07-22
    • 2017-11-09
    • 2020-09-05
    • 1970-01-01
    • 1970-01-01
    • 2019-05-26
    • 2014-11-26
    • 2014-08-30
    • 2023-03-26
    相关资源
    最近更新 更多