在 R 中的数据帧上使用 psych reverse.code()
use psych reverse.code() on dataframe in R
我正在尝试在具有数字和非数字列的数据框中的一列上使用 psych 包中的 reverse.code()。但是,当我尝试这样做时,出现错误:
Error in items %*% keys.d :
requires numeric/complex matrix/vector arguments
您对如何完成这项工作有什么建议吗?我正在为我的学生制作一个教程,他们的 R 能力差异很大,所以代码越简单越好。这是一个给出相同错误的模拟数据集:
sample <- tibble(name = c("Joe", "Frank"),
item_1 = c(1, 1),
item_2 = c(1, 1),
item_3 = c(5, 5))
key <- c("item_3")
reverse.code(keys = key, items = sample, mini = 1, maxi = 5)
如果我们 select
数据不包括第一列,即 character
列,它应该可以工作
library(psych)
reverse.code(keys = key, items =sample[-1], mini = 1, maxi = 5)
# item_1 item_2 item_3-
#[1,] 1 1 1
#[2,] 1 1 1
或 %>%
library(dplyr)
sample %>%
select_if(is.numeric) %>%
reverse.code(keys = key, items = ., mini = 1, maxi = 5)
这个主题可能很旧,但我遇到了同样的问题,@ak运行 的解决方案在技术上是可行的,但最后,你没有得到一个数据帧作为输出,因此可以' t 做进一步的计算。
首先,正如您所说的与学生一起工作,您的数据可能如下所示:
library(tibble)
sample <- tribble(~name, ~item_1, ~item_2, ~item_3,
'Joe', 1, 1, 5,
'Frank', 1, 1, 5)
key <- c(1, 1, -1)
这样学生阅读起来更直观(但只是加法,不改变结果)
@ak运行给出的方案确实是正确的。但是,最后需要名称,因为在这里您想知道谁得到了哪个分数(或者通常您可能希望通过 ID 作为键将结果绑定到数据集)。因此,以下内容也可能对您有用:
- 将名称(或 ID)保存为行名称
- 运行
reverse.code()
函数
- 通过
转换结果以将行名称作为列返回
确保在第 3 步中使用 as.data.frame()
,因为 as_tibble()
会忽略名称。
library(psych)
library(dplyr)
sample %>%
column_to_rownames(var = "name") %>%
reverse.code(keys = key, items = ., mini = 1, maxi = 5) %>%
as.data.frame() %>%
rownames_to_column(var = "name") -> sample_inv
我正在尝试在具有数字和非数字列的数据框中的一列上使用 psych 包中的 reverse.code()。但是,当我尝试这样做时,出现错误:
Error in items %*% keys.d :
requires numeric/complex matrix/vector arguments
您对如何完成这项工作有什么建议吗?我正在为我的学生制作一个教程,他们的 R 能力差异很大,所以代码越简单越好。这是一个给出相同错误的模拟数据集:
sample <- tibble(name = c("Joe", "Frank"),
item_1 = c(1, 1),
item_2 = c(1, 1),
item_3 = c(5, 5))
key <- c("item_3")
reverse.code(keys = key, items = sample, mini = 1, maxi = 5)
如果我们 select
数据不包括第一列,即 character
列,它应该可以工作
library(psych)
reverse.code(keys = key, items =sample[-1], mini = 1, maxi = 5)
# item_1 item_2 item_3-
#[1,] 1 1 1
#[2,] 1 1 1
或 %>%
library(dplyr)
sample %>%
select_if(is.numeric) %>%
reverse.code(keys = key, items = ., mini = 1, maxi = 5)
这个主题可能很旧,但我遇到了同样的问题,@ak运行 的解决方案在技术上是可行的,但最后,你没有得到一个数据帧作为输出,因此可以' t 做进一步的计算。
首先,正如您所说的与学生一起工作,您的数据可能如下所示:
library(tibble)
sample <- tribble(~name, ~item_1, ~item_2, ~item_3,
'Joe', 1, 1, 5,
'Frank', 1, 1, 5)
key <- c(1, 1, -1)
这样学生阅读起来更直观(但只是加法,不改变结果)
@ak运行给出的方案确实是正确的。但是,最后需要名称,因为在这里您想知道谁得到了哪个分数(或者通常您可能希望通过 ID 作为键将结果绑定到数据集)。因此,以下内容也可能对您有用:
- 将名称(或 ID)保存为行名称
- 运行
reverse.code()
函数 - 通过 转换结果以将行名称作为列返回
确保在第 3 步中使用 as.data.frame()
,因为 as_tibble()
会忽略名称。
library(psych)
library(dplyr)
sample %>%
column_to_rownames(var = "name") %>%
reverse.code(keys = key, items = ., mini = 1, maxi = 5) %>%
as.data.frame() %>%
rownames_to_column(var = "name") -> sample_inv