我有关于纳税人的数据,这些纳税人有多个分支机构,这些分支机构会产生多行,除了一个相关列(企业活动)外,几乎都是重复的。我想更改此设置,以使每个纳税人只有一行,这涉及创建列“ enterprise_activity_1”,“ enterprise_activity_2”等。
我意识到这类似于重塑,但是我想不出一种使用tidyr :: spread实现此目的的方法。
为简单起见,假设我们只有一个数据框,例如:
df <- tibble::tibble(
TAXPAYER_ID = c(100, 151, 250, 250, 267, 296, 296, 304),
ENTERPRISE_ACTIVITY = rep(c("AGRICULTURE", "MANUFACTURING"), 4)
)
我想实现的是:
TAXPAYER_ID ENTERPRISE_ACTIVITY_1 ENTERPRISE_ACTIVITY_2
100 AGRICULTURE NA
151 MANUFACTURING NA
250 AGRICULTURE MANUFACTURING
267 AGRICULTURE NA
296 MANUFACTURING AGRICULTURE
304 MANUFACTURING NA
我的实际数据中每个纳税人的分支机构数量不同,因此列数应为一个纳税人拥有的最大分支机构数量。
答案 0 :(得分:0)
基本上,您需要按纳税人ID分组,创建一列以处理重复的标识符和利差,即
library(tidyverse)
df %>%
group_by(TAXPAYER_ID) %>%
mutate(ENTERPRISE_ACT = row_number()) %>%
spread(key = ENTERPRISE_ACT, ENTERPRISE_ACTIVITY, sep = '_')
# A tibble: 6 x 3
# Groups: TAXPAYER_ID [6]
# TAXPAYER_ID ENTERPRISE_ACT_1 ENTERPRISE_ACT_2
# <dbl> <chr> <chr>
#1 100 AGRICULTURE <NA>
#2 151 MANUFACTURING <NA>
#3 250 AGRICULTURE MANUFACTURING
#4 267 AGRICULTURE <NA>
#5 296 MANUFACTURING AGRICULTURE
#6 304 MANUFACTURING <NA>