r - R:df 标题列是序数排名,并在每个观察的列中分布
问题描述
我有一份问卷数据,如下所示:
items no_stars1 no_stars2 no_stars3 average satisfied bad
1 A 1 0 0 0 0 1
2 B 0 1 0 1 0 0
3 C 0 0 1 0 1 0
4 D 0 1 0 0 1 0
5 E 0 0 1 1 0 0
6 F 0 0 1 0 1 0
7 G 1 0 0 0 0 1
基本上,标题栏(星级和满意的数量)是每个项目的序数排名。我想将 no_stars(col 2:4) 和 compatible(col 5:7) 总结为一列,以便输出如下所示:
items no_stars satisfactory
1 A 1 1
2 B 2 2
3 C 3 3
4 D 2 3
5 E 3 2
6 F 3 3
7 G 1 1
$no_stars <- 1 代表 no_stars1,2 代表 no_stars2,3 代表 no_stars3
$satisfactory <- 1 表示差,2 表示一般,3 表示好
我试过下面的代码
df$no_stars2[df$no_stars2 == 1] <- 2
df$no_stars3[df$no_stars3 == 1] <- 3
df$average[df$average == 1] <- 2
df$satisfied[df$satisfied == 1] <- 3
no_stars <- df$no_stars1 + df$no_stars2 + df$no_stars3
satisfactory <- df$bad + df$average + df$satisfied
tidy_df <- data.frame(df$Items, no_stars, satisfactory)
tidy_df
R中是否有任何功能可以做同样的事情?或者有人有更好更简单的解决方案吗?
谢谢
解决方案
只需使用max.col
并设置首选项:
starsOrder<-c("no_stars1","no_stars2","no_stars3")
satOrder<-c("bad","average","satisfied")
data.frame(items=df$items,no_stars=max.col(df[,starsOrder]),
satisfactory=max.col(df[,satOrder]))
# items no_stars satisfactory
#1 A 1 1
#2 B 2 2
#3 C 3 3
#4 D 2 3
#5 E 3 2
#6 F 3 3
#7 G 1 1
推荐阅读
- powerbi - 如何在不同的数据源链接中使用相同的已发布 PowerBI 报表?
- rust - 使用 LD.LLD 链接 Rust 二进制文件
- testing - 如何在测试上下文中使用 LocalizationUtility
- python - 在 Python 中使用德语变音符号查询 mongoDB
- vue.js - 将轮播/导航箭头放在 vue-awesome-slider 之外
- android - Android Studio 在 Ubuntu 18.04 LTS 上不断崩溃
- javascript - React 重新渲染组件
- javascript - 函数中的循环要么跳过逻辑测试,要么没有正确评估
- android - 如何使用 EditText 在一行中设置 Spinner
- c# - 属性或索引器不能分配给“”它是只读的