R 将数据帧转换为整洁格式
在这里,我尝试将dataframe转换为TIBLE格式,并将年、月列值拆分为它们自己的行:R 将数据帧转换为整洁格式,r,R,在这里,我尝试将dataframe转换为TIBLE格式,并将年、月列值拆分为它们自己的行: library(dpylr) library(tidyr) res <- data.frame("year.month" = c("2005M1","2005M2","2005M3","2005M4"), "national houses" = c(100,100,100,100), "dublin houses" = c(120,120,120,120)) res %>% separat
library(dpylr)
library(tidyr)
res <- data.frame("year.month" = c("2005M1","2005M2","2005M3","2005M4"), "national houses" = c(100,100,100,100), "dublin houses" = c(120,120,120,120))
res %>% separate(year.month , into=c("year" , "month") , sep=".")
年份和月份值没有出现,我没有正确使用分隔符?
是正则表达式中的通配符,而sep
中的sep
参数使用正则表达式,因此您的代码尝试按每个字符分割year.month
,因此警告值过多。以下内容使用正向向后看和向前看正确分隔列:
library(dplyr)
library(tidyr)
res %>%
separate(year.month, into = c("year", "month"), sep = "(?<=\\d)(?=M)")
结果:
year month national.houses dublin.houses
1 2005 M1 100 120
2 2005 M2 100 120
3 2005 M3 100 120
4 2005 M4 100 120
我想,把年复一年的工作和月份分开,你就会有一半的整洁。 您仍然有两个单独的列,都计算房屋。每个观察值一行,每个变量一列需要如下内容:
res %>%
tidyr::gather(key = where,
value = houses,
-year.month) %>%
mutate(where = gsub(where,
pattern = '\\.houses',
replacement = '')) %>%
separate(year.month,
into = c('year', 'month'),
sep = 'M')
您能否详细说明为什么在gather中使用-year.month参数而不是year.month参数?为什么要对year.month使用负数运算符?列名称或名称集前面的-表示“但不要收集这些”。试着看看如果删除-year.month会发生什么。我不完全同意你的说法:“将年与月分开会使你保持半整洁”。什么是“整洁”取决于上下文(也就是说,没有适用于所有用例的单一表格格式)。而长格式(每个观察一行)对于某些操作(如绘图和聚合)可能更干净,宽格式可能更适用于表示每月计数。你的答案被接受,在OP的问题中没有足够的信息表明哪种格式更合适,IMO。我只是使用了严格的定义“每个观察值一行,每个变量一列。”根据这个定义,更长的是更整洁的;整洁的,取决于上下文,可能不会更有用。我想这就是你的意思,我同意。但我的建议被接受了。
year month national.houses dublin.houses
1 2005 M1 100 120
2 2005 M2 100 120
3 2005 M3 100 120
4 2005 M4 100 120
res %>%
tidyr::gather(key = where,
value = houses,
-year.month) %>%
mutate(where = gsub(where,
pattern = '\\.houses',
replacement = '')) %>%
separate(year.month,
into = c('year', 'month'),
sep = 'M')