我知道它表明已经在这里{/ {3}}处提出/回答了这个问题,但没有我要找的解决方案。 (我的列没有填充空格)
这是我的原始数据
head(d)
County ID event1 event2 row1 row2
Rogers 1 Hearing Application Plea Trial
Rogers 2 Arrest Hearing Application Plea
Rogers 3 Arrest Hearing Plea Disposal
我需要事件和行列全部都存在于一行中。
events <- d %>%
select(County, ID, contains("event"), contains("row")) %>%
gather(m, event, contains("event")) %>%
filter(!is.na(event)) %>%
select(-m)
head(events)
County ID event row1 row2
Rogers 1 Hearing Plea Trial
Rogers 1 Application Plea Trial
Rogers 2 Arrest Application Plea
Rogers 2 Hearing Application Plea
我仍然需要将行列作为事件。
events2 <- events %>%
select(County, ID, event, contains("row")) %>%
gather(m, event, contains("row")) %>%
filter(!is.na(event)) %>%
select(-m)
我希望它看起来像这样。
head(events2)
County ID event
Rogers 1 Hearing
Rogers 1 Application
Rogers 1 Plea
Rogers 1 Trial
但是相反,它返回了一个带有0个观察值的空数据帧。
events2
NULL
我在做什么错?谢谢!
答案 0 :(得分:0)
类似于评论中提到的内容,即使复制/粘贴代码,我也无法重现您的问题。也就是说,我得到了预期的输出。但是我有一个可能会有所帮助的解决方案。
也许您可以通过进行一轮管道传输来缓解问题,而不是使用正则表达式版本contains()
来匹配'matches()
或row'
来使用'event'
,有效地将列标题与“行”和“事件”匹配。这消除了必须运行两次管道程序的时间,在这种情况下,使用复制粘贴更改方法可能会出错(我知道我一直都在犯错误)。
events <- d %>%
select(County,ID,matches('event|row')) %>%
gather(m,event,matches('row|event[0-9]+')) %>%
select(-m) %>%
filter(!is.na(event))
简而言之,在matches()
函数中对gather()
的调用说:匹配“行”或匹配“事件”,当其后跟随至少一个0到9之间的数字。有关更多信息,请参见此整洁的图形:Regular Expressions in R。
我必须在此之后对data.frame进行排序,但是随后我得到了:
>head(events)
County ID event
Rogers 1 Hearing
Rogers 1 Application
Rogers 1 Plea
Rogers 1 Trial
Rogers 2 Arrest
Rogers 2 Hearing
我正在使用tidyverse v1.2.1。希望有帮助!