我的数据“ IDrel”具有三个变量,“ ID”,“类别”和“值”,看起来像这样:
ID category value
1 AU: Duflo, Esther
2 2 AF: MIT
3 3 SO: American Economic Journal: Applied Economics, 2(2), April 2010, pp.
4 4 IS: 1945-7782
5 5 AV: http://www.aeaweb.org/aej-applied/
6 6 DT: Journal Article
7 7 PY: 2010
8 8 AN: 1094392
9 9 TI: Prize Structure and Information in Tournaments: Experimental Evidence
10 10 AU: Freeman, Richard B.; Gelber, Alexander M.
11 11 AF: NBER; NBER
12 12 SO: American Economic Journal: Applied Economics, 2
“类别”有9个唯一值,我想将它们中的每一个都变成自己的变量,并用“值”-变量表示值。从理论上讲,这应该将变量的数量增加到11,并将观察值的数量减少9/10。
所需的输出看起来像这样:
ID AU: SO. IS: [more variables]
1 Duflo, Esther American Economic Journal 1945-7782 [more values]
2 Freeman, Richard American Economic Journal: [...]
我尝试通过传播功能实现这一目标:
IDspread<-spread(IDrel, category, value)
我实际上得到了11个变量,但是得到的观察值却相同。结果对我来说似乎是荒谬的,这些是前十个观察结果:
IS: PY:
1 <NA> <NA>
2 <NA> <NA>
3 <NA> <NA>
4 1945-7782 <NA>
我正确使用此功能吗?有其他选择吗?
我意识到ID变量不能反映哪个类别/值属于哪个观察值,但是我需要对数据重新排序,以便为每个观察值“获取”正确的索引^^
答案 0 :(得分:2)
问题是使用ID
变量。它具有独特的价值。因此,如果我们在执行spread
时保留该变量,则spread
输出中的行数将等于'ID'中唯一元素的数,而不存在的组合将为{ {1}}。删除“ ID”,创建一个按“类别”分组的序列列(以处理重复项),然后NA
spread
library(dplyr)
library(tidyr)
IDrel %>%
group_by(category) %>%
mutate(ID = row_number()) %>% # update the ID column
spread(category, value)
# A tibble: 2 x 10
# ID `AF:` `AN:` `AU:` `AV:` `DT:` `IS:` `PY:` `SO:` `TI:`
# <int> <chr> <chr> <chr> <chr> <chr> <chr> <chr> <chr> <chr>
#1 1 MIT 10943… Duflo, Esther http://www.aeawe… Journal … 1945-… 2010 American Economic Journal: Ap… Prize Structure and Informati…
#2 2 NBER; N… <NA> Freeman, Richard B.… <NA> <NA> <NA> <NA> American Economic Journal: Ap… <NA>
答案 1 :(得分:1)
这不是spread()
上问题的直接答案,但数据看起来非常类似于DCF
格式。
DCF
是一种用于将数据库存储为纯文本文件的简单格式,可以使用基数R的read.dcf()
函数直接从文件中读取。
因此,如果数据将存储在文件IDrel.dcf
AU: Duflo, Esther AF: MIT SO: American Economic Journal: Applied Economics, 2(2), April 2010, pp. IS: 1945-7782 AV: http://www.aeaweb.org/aej-applied/ DT: Journal Article PY: 2010 AN: 1094392 TI: Prize Structure and Information in Tournaments: Experimental Evidence AU: Freeman, Richard B.; Gelber, Alexander M. AF: NBER; NBER SO: American Economic Journal: Applied Economics, 2
命令
read.dcf("IDrel.dcf", all = TRUE)
将返回data.frame
AU AF SO IS 1 Duflo, Esther MIT American Economic Journal: Applied Economics, 2(2), April 2010, pp. 1945-7782 2 Freeman, Richard B.; Gelber, Alexander M. NBER; NBER American Economic Journal: Applied Economics, 2 <NA> AV DT PY AN TI 1 http://www.aeaweb.org/aej-applied/ Journal Article 2010 1094392 Prize Structure and Information in Tournaments: Experimental Evidence 2 <NA> <NA> <NA> <NA>
请注意,空行表示新记录的开始。
在帮助文件DCF
中解释了R中实现的?read.dcf
规则。