是否有 R 函数来反转李克特刻度值?



我有一个李克特比例的巨大数据框,值在 1 到 5 之间。但是我想更改一些数值来反转比例,但手动需要很多时间。问题是:有更简单的方法来更改值?

我认为一个例子效果更好,所以这是我现在拥有的数据框。对于每个问题,答案都有一个数字表示。

Q1 <- c(1,3,5,2,4)

Q2 <- c(5,3,1,2,4)

Q3 <- c(1,1,1,5,5)

my.df <- data.frame(Q1,Q2,Q3)

print(my.df)

我需要的数据框具有保存在数据库中的相反值。

Q1 <- c(5,3,1,4,2)

Q2 <- c(1,3,5,4,2)

Q3 <- c(5,5,5,1,1)

my.df2 <- data.frame(Q1,Q2,Q3)

print(my.df2)

也许这是一个简单的问题,但我尝试了一些 apply family 函数,它们返回一个列表,我尝试的所有循环都返回错误,所以我无法弄清楚如何进行我需要的更改。

这是一个非常简单的方法:

6 - my.df
Q1 Q2 Q3
1  5  1  5
2  3  3  5
3  1  5  5
4  4  4  1
5  2  2  1

为什么有效:my.df仅包含数值数据和算术运算,R被矢量化。6 - my.df6中减去my.df中的每个值。因为my.dfdata.frame,所以输出也是。

这可能很有用。您可以使用新值创建keys数据并重塑数据,以便合并和添加新值:

library(dplyr)
library(tidyr)
#Keys
keys <- data.frame(value=1:5,new=5:1)
#Merge
new <- my.df %>%
mutate(id=row_number()) %>%
pivot_longer(-id) %>%
left_join(keys) %>%
select(-value) %>%
pivot_wider(names_from = name,values_from=new) %>%
select(-id)

输出:

# A tibble: 5 x 3
Q1    Q2    Q3
<int> <int> <int>
1     5     1     5
2     3     3     5
3     1     5     5
4     4     4     1
5     2     2     1

最新更新