r语言 - '.rowNamesDF<-'(x, value = value) 中的错误:不允许'row.names'重复。另外:警告消息:非唯一值



我有以下数据框total_authority

structure(list(country = c("Albania", "Algeria", "American Somoa", 
"Angola", "Anguilla", "Antigua", "Argentina", "Armenia", "Aruba", 
"Australia"), `1994` = c(0.0000000000000000312250225675825, 0.0000000000000000312250225675825, 
0.0000000000000000312250225675825, 0.0000000000000000312250225675825, 
0.0000000000000000312250225675825, 0.0000000000000000312250225675825, 
0.00289122132708816, 0.0000000000000000312250225675825, 0.00000528966979389429, 
0.00622391681538348), country.1 = c("Albania", "Algeria", "American Somoa", 
"Angola", "Anguilla", "Antigua", "Argentina", "Armenia", "Aruba", 
"Australia"), `1995` = c(0.00000320558770721281, 0.0000000000000000277555756156289, 
0.0000000000000000277555756156289, 0.0000000000000000277555756156289, 
0.0000000000000000277555756156289, 0.0000000000000000277555756156289, 
0.0224538010858487, 0.0000000000000000277555756156289, 0.0000000000000000277555756156289, 
0.407633483379219)), row.names = c(NA, 10L), class = "data.frame")

我想重新排列它,第一列包含国家,第二列表示年份,第三列是该年份国家的得分。

从视觉上看,数据帧total_authority现在是
country                      1994      country.1                      1995
1         Albania 0.00000000000000003122502        Albania 0.00000320558770721280500
2         Algeria 0.00000000000000003122502        Algeria 0.00000000000000002775558
3  American Somoa 0.00000000000000003122502 American Somoa 0.00000000000000002775558
4          Angola 0.00000000000000003122502         Angola 0.00000000000000002775558
5        Anguilla 0.00000000000000003122502       Anguilla 0.00000000000000002775558
6         Antigua 0.00000000000000003122502        Antigua 0.00000000000000002775558
7       Argentina 0.00289122132708816148572      Argentina 0.02245380108584869860433
8         Armenia 0.00000000000000003122502        Armenia 0.00000000000000002775558
9           Aruba 0.00000528966979389429437          Aruba 0.00000000000000002775558
10      Australia 0.00622391681538347896208      Australia 0.40763348337921861963551

期望的结果是:

country                     score  year
Albania 0.00000000000000003122502  1994
Algeria 0.00000000000000003122502  1994
American Somoa 0.00000000000000003122502  1994
Angola 0.00000000000000003122502  1994
Anguilla 0.00000000000000003122502  1994
Antigua 0.00000000000000003122502  1994
Argentina 0.00289122132708816148572  1994
Armenia 0.00000000000000003122502  1994
Aruba 0.00000528966979389429437  1994
Australia 0.00622391681538347896208   1994
Albania 0.00000320558770721280500  1995
Algeria 0.00000000000000002775558  1995
American Somoa 0.00000000000000002775558  1995
Angola 0.00000000000000002775558  1995
Anguilla 0.00000000000000002775558  1995
Antigua 0.00000000000000002775558  1995
Argentina 0.02245380108584869860433  1995
Armenia 0.00000000000000002775558  1995
Aruba 0.00000000000000002775558  1995
Australia 0.40763348337921861963551   1995

这是我的尝试(count指数的for loop范围在1和2之间,但它只是一个例子):

actors<-c("Albania", "Algeria", "American Somoa", "Angola", "Anguilla", "Antigua", "Argentina", "Armenia", "Aruba", "Australia")
final_output<-data.frame()
for (count in 1:2) {
df <- data.frame(country=actors)
df$year=rep(names(total_authority)[2*count],nrow(df))
df$authority<-total_authority[2*count]
final_output <- rbind(final_output, df)
}

无论如何,我得到了以下错误:

Error in `.rowNamesDF<-`(x, value = value) : 
'row.names' duplicate are not allowed.
In addition: Warning message:
non-unique values when setting 'row.names': ‘1’, ‘10’, ‘2’, ‘3’, ‘4’, ‘5’, ‘6’, ‘7’, ‘8’, ‘9’ 

这里不需要for循环。直接索引data.frame以获取列unlist的子集,并直接构建data.frame

out <-  data.frame(country = unlist(total_authority[c(1,3)]), 
score = unlist(total_authority[c(2,4)]),
year = rep(names(total_authority)[c(2,4)], each = nrow(total_authority)))
row.names(out) <- NULL

与产出

> out
country                     score year
1         Albania 0.00000000000000003122502 1994
2         Algeria 0.00000000000000003122502 1994
3  American Somoa 0.00000000000000003122502 1994
4          Angola 0.00000000000000003122502 1994
5        Anguilla 0.00000000000000003122502 1994
6         Antigua 0.00000000000000003122502 1994
7       Argentina 0.00289122132708816018468 1994
8         Armenia 0.00000000000000003122502 1994
9           Aruba 0.00000528966979389429013 1994
10      Australia 0.00622391681538347982944 1994
11        Albania 0.00000320558770721281009 1995
12        Algeria 0.00000000000000002775558 1995
13 American Somoa 0.00000000000000002775558 1995
14         Angola 0.00000000000000002775558 1995
15       Anguilla 0.00000000000000002775558 1995
16        Antigua 0.00000000000000002775558 1995
17      Argentina 0.02245380108584869860433 1995
18        Armenia 0.00000000000000002775558 1995
19          Aruba 0.00000000000000002775558 1995
20      Australia 0.40763348337921900821357 1995

关于重复行名的错误,它的发生是因为创建的authority是具有单列([)的data.frame,相反,我们需要通过提取列([[)来获取向量

final_output<-data.frame()
for (count in 1:2) {
df <- data.frame(country=actors)
df$year=rep(names(total_authority)[2*count],nrow(df))
df$authority<-total_authority[[2*count]]
final_output <- rbind(final_output, df)
}

与产出

> final_output
country year                 authority
1         Albania 1994 0.00000000000000003122502
2         Algeria 1994 0.00000000000000003122502
3  American Somoa 1994 0.00000000000000003122502
4          Angola 1994 0.00000000000000003122502
5        Anguilla 1994 0.00000000000000003122502
6         Antigua 1994 0.00000000000000003122502
7       Argentina 1994 0.00289122132708816018468
8         Armenia 1994 0.00000000000000003122502
9           Aruba 1994 0.00000528966979389429013
10      Australia 1994 0.00622391681538347982944
11        Albania 1995 0.00000320558770721281009
12        Algeria 1995 0.00000000000000002775558
13 American Somoa 1995 0.00000000000000002775558
14         Angola 1995 0.00000000000000002775558
15       Anguilla 1995 0.00000000000000002775558
16        Antigua 1995 0.00000000000000002775558
17      Argentina 1995 0.02245380108584869860433
18        Armenia 1995 0.00000000000000002775558
19          Aruba 1995 0.00000000000000002775558
20      Australia 1995 0.40763348337921900821357

相关内容

最新更新