r - 在多列上使用 tidyr 的 pivot_wider 的问题
问题描述
我正在尝试使用 tidyr 中的 pivot_wider 函数同时转置两种值,如 vignette('pivot') 下的“每行多个观察值”示例所示,但我不断收到奇怪的错误消息。
这是正在发生的事情的一个例子:
set.seed(5)
testdat <- data.frame(matrix(nrow=5,ncol=5))
colnames(testdat) <- c('rating','percent.Female','percent.Male','se.Female','se.Male')
testdat$rating <- c('Very good','Good','OK','Bad','Very bad')
testdat$percent.Female <- rnorm(5,.5,.2)
testdat$percent.Male <- 1 - testdat$percent.Female
testdat$se.Female <- rnorm(5,0.1,0.003)
testdat$se.Male <- rnorm(5,0.1,0.003)
testdat
rating percent.Female percent.Male se.Female se.Male
1 Very good 0.3318289 0.6681711 0.09819128 0.10368289
2 Good 0.7768719 0.2231281 0.09858350 0.09759466
3 OK 0.2489016 0.7510984 0.09809389 0.09675882
4 Bad 0.5140286 0.4859714 0.09914268 0.09952740
5 Very bad 0.8422882 0.1577118 0.10041432 0.09678472
testdat %>% pivot_longer(cols=-"rating",names_sep=".",names_to=c(".value","gender"),values_drop_na=T)
Error: Expected a vector, not NULL Call `rlang::last_error()` to see a backtrace In addition: Warning message: Expected 2 pieces. Additional pieces discarded in 4 rows [1, 2, 3, 4]
我几乎完全按照小插图进行了操作-为什么这不起作用?
解决方案
由于该选项,代码的问题正在发生names_sep="."
(您会在枢轴小插图中注意到,名称由 _ 而不是 . 分隔。)
.
是用于匹配任何单个字符的特殊字符。如果要指定变量名由实际.
字符本身分隔,则需要使用names_sep="\\."
来转义它。
转义到位后,示例如下:
testdat %>%
pivot_longer(cols=-"rating", names_sep="\\.",
names_to=c(".value","gender"), values_drop_na=TRUE)
# A tibble: 10 x 4
rating gender percent se
<chr> <chr> <dbl> <dbl>
1 Very good Female 0.332 0.0982
2 Very good Male 0.668 0.104
3 Good Female 0.777 0.0986
4 Good Male 0.223 0.0976
5 OK Female 0.249 0.0981
6 OK Male 0.751 0.0968
7 Bad Female 0.514 0.0991
8 Bad Male 0.486 0.0995
9 Very bad Female 0.842 0.100
10 Very bad Male 0.158 0.0968
推荐阅读
- javascript - 如何通过 javascript 制作 html 和 css 组件?
- python - Python脚本无限循环直到特定的按键
- excel - 在公式中插入变量
- makefile - 为什么我的 makefile 使用星号作为通配符,但不使用百分比?
- javascript - 无法在 html 中显示 POSTed PHP 变量
- matlab - 使用函数用逐个元素的操作填充矩阵
- javascript - 如何根据 reactjs 路由器删除脚本标签?
- php - 提交表单后未收到发布变量
- android - 人类活动识别数据集问题
- git - 如何从 GitHub 上的拉取请求中删除二进制文件?