我想将一些数值重新编码为不同的数值,并使用以下代码:
survey$KY27PHYc <- revalue(survey$KY27PHY1, c(5=3, 4=2,3=2,2=1,1=1))
我收到以下错误:
## Error: unexpected '=' in "survey$KY27PHYc <- revalue(survey$KY27PHY1, c(5="
Run Code Online (Sandbox Code Playgroud)
我哪里错了?
我的数据集中有几个变量需要以完全相同的方式进行重新编码,还有一些其他需要以不同方式重新编码的变量.我试着写一个函数来帮助我,但我遇到了麻烦.
library(dplyr)
recode_liberalSupport = function(arg1){
arg1 = recode(arg1, "1=-1;2=1;else=NA")
return(arg1)
}
liberals = c(df$var1, df$var4, df$var8)
for(i in unique(liberals)){
paste(df$liberals[i] <- sapply(liberals, FUN = recode_liberalSupport))
}
Run Code Online (Sandbox Code Playgroud)
R studio在这上工作约5分钟,然后给我这个错误信息:
Error in `$<-.data.frame`(`*tmp*`, liberals, value = c(NA_real_, NA_real_, :
replacement has 9 rows, data has 64600
In addition: Warning messages:
1: Unknown or uninitialised column: 'liberals'.
2: In df$liberals[i] <- sapply(liberals, FUN = recode_liberalSupport) :
number of items to replace is not a multiple of replacement length
Run Code Online (Sandbox Code Playgroud)
任何帮助将非常感激!谢谢
我正在尝试对数据框中的某些项目进行评分(重新编码)。所有反向得分的项目都以R结尾,并且每个音阶都有一个唯一的开始(“ hc”,“ out”和“ hm”)。我通常只选择所有以“ r”结尾的变量,但是问题是有些标度为5点标度(“ hc”和“ out”),而其他标度为7点标度(“ hm” ”)。
这是更大得多的数据集的示例:
library(tidyverse)
data <- tibble(name = c("Mike", "Ray", "Hassan"),
hc_1 = c(1, 2, 3),
hc_2r = c(5, 5, 4),
out_1r = c(5, 4, 2),
out_2 = c(2, 4, 5),
out_3r = c(2, 2, 1),
hm_1 = c(6, 7, 7),
hm_2r = c(7, 1, 7))
Run Code Online (Sandbox Code Playgroud)
假设我想一次做一个标度,所以我从hm开始,它是七点标度。
我想用&语句尝试类似的操作,但出现错误:
library(tidyverse)
library(car)
data %>%
mutate_at(vars(ends_with("r") & starts_with("hm")), ~(recode(., "1=7; 2=6; 3=5; 4=4; 5=3; 6=2; 7=1")))
Run Code Online (Sandbox Code Playgroud)
错误:
ends_with("r") & starts_with("hc")必须求值为列的位置或名称,而不是逻辑向量
有什么干净的方法可以让它一次对这几个变量执行反向计分?再一次,数据集太大,实际上一次只能选择单个变量。
谢谢!
我有一个我称之为"鱼"的数据框.
数据框有3个不同的变量.其中一个变量称为"物种".
有些物种以字母M开头.我想改变以字母M缺失(NA)开头的物种的所有值.
当你做整个物种的名字时,我知道如何将它改为NA,但你怎么做只用字母M开头的物种呢?
我试过这个:
fish$species[fish$species=="^M_"] <- NA
Run Code Online (Sandbox Code Playgroud)
但这不起作用.有人可以帮忙吗?
我有一个 tibble, df, , , A, 我希望:
1) 的副本C, 和
2) 基于第二个变量重新编码B。
目前我正在以这种迂回的方式进行。我对因子的条件重新编码感到非常困惑。我也看了dplyr'srecode,但找不到更聪明的方法。
library(tibble)
df <- tibble(
A = factor(c(NA, "b", "c")),
B = c(1,NA,3)
)
Run Code Online (Sandbox Code Playgroud)
我最初的小费
df
#> # A tibble: 3 x 2
#> A B
#> <fctr> <dbl>
#> 1 <NA> 1
#> 2 b NA
#> 3 c 3
Run Code Online (Sandbox Code Playgroud)
我当前解决方案中的第 1 步
df$C <- with(df, ifelse(is.na(B), 'B is NA', A))
df
#> # A tibble: 3 …Run Code Online (Sandbox Code Playgroud) 我经常在 library(car) 中使用 'recode' 函数来重新编码变量中的级别。直到今天,我的代码都运行良好,但现在却出现了错误。df 等没有任何变化,不确定发生了什么。
可能有人可以启发我!
我的数据框(样本):
test<-structure(list(Avg.Salary = c("65000", "395", "82000", "128357",
"95785", "95785"), Education = c("Doctorate", "Professional Degree",
"Bachelor's", "Professional Degree", "Master's", "Master's"),
Count = c("D", "D", "D", "D", "D", "364584"), Year = c(2017,
2017, 2017, 2017, 2017, 2017)), row.names = c("540061", "540071",
"540081", "540091", "540102", "540112"), class = "data.frame")
Run Code Online (Sandbox Code Playgroud)
我的实际数据集中的级别:-
Associate Degree Associates Bachelor's
205 35 42446
D Doctorate High School
42902 9846 191
Master's Missing Education No Diploma
57644 218 79
Professional Professional …Run Code Online (Sandbox Code Playgroud) 我确信这是一个非常简单的修复,但我似乎找不到答案...我试图在数据框的末尾创建一个列,它是特定值的次数总和(例如“1”)出现在该行上。例如,如果我从以下数据框开始:
X1 <- c(5,1,7,8,1,5)
X2 <- c(5,0,0,2,3,7)
X3 <- c(6,2,3,4,1,7)
X4 <- c(1,1,5,2,1,7)
df <- data.frame(id,X1,X2,X3,X4)
id X1 X2 X3 X4
1 1 5 5 6 1
2 2 1 0 1 1
3 3 7 0 3 5
4 4 8 2 4 2
5 5 1 3 2 1
6 6 5 7 7 7
Run Code Online (Sandbox Code Playgroud)
我试图确定值“1”在该行中出现了多少次,我希望输出如下所示:
id X1 X2 X3 X4 one_appears
1 1 5 5 6 1 2
2 2 1 0 1 1 3
3 3 …Run Code Online (Sandbox Code Playgroud) 有人可以帮助我关于ifelse.
我有一个data.frame(dat) 和一个名为 Q1 ( dat$Q1)的分类变量/因子。dat$Q1被编码为 1,2,3 或 4。我需要data$new1根据以下规则创建一个新列:
如果dat$Q1 == 3然后dat$new1应该是1。否则,dat$new1应该是0。
请问这样做最有效的方法是什么?
当我%in%在重新编码分类变量的条件下使用时,遇到了意外的输出。
当左侧向量的元素为 时NA,条件计算结果为FALSE,而我期望它是NA。
预期的行为是更详细的语句,其中两个==条件由|
dt <- data.frame(colour = c("red", "orange", "blue", NA))
# Expected
dt$is_warm1 <- ifelse(dt$colour == "red" | dt$colour == "orange", TRUE, FALSE)
# Unexpected
dt$is_warm2 <- ifelse(dt$colour %in% c("red", "orange"), TRUE, FALSE)
dt
Run Code Online (Sandbox Code Playgroud)
#> colour is_warm1 is_warm2
#> 1 red TRUE TRUE
#> 2 orange TRUE TRUE
#> 3 blue FALSE FALSE
#> 4 <NA> NA FALSE
Run Code Online (Sandbox Code Playgroud)
这在重新编码分类变量时非常没有帮助,因为它会默默地填充缺失值。为什么会发生这种情况?是否有任何不涉及列出所有==条件的替代方案?(想象一下colour包含三十个可能的级别)。
我有一个具有以下结构的数据框:
id v1 v2 v3 v4 v5
1 . 1 . 2 3
2 1 2 3 . .
3 3 2 . 1 .
Run Code Online (Sandbox Code Playgroud)
我想像这样重新编码
id v1 v2 v3 v4 v5
1 0 3 0 2 1
2 3 2 1 0 0
3 1 2 0 3 0
Run Code Online (Sandbox Code Playgroud)
所以我想重新编码值 (1=3) (missing = 0) (3=1)
在 SPSS 中,这是相当直观的:
recode v1 to v5 (sysmis=0)(3=1)(1=3)(else=copy).
Run Code Online (Sandbox Code Playgroud)
我正在 R 中寻找类似的方法。对基本方法或 tidyverse 方法没有偏好。