我需要d根据查找向量有条件地重新编码我的数据帧。
dput(lookup)
structure(c("Apple", "Apple", "Banana", "Carrot"), .Names = c("101", "102", "102", "103"))
dput(d)
structure(list(pat = c(101, 101, 101, 102, 102, 103), gene = structure(1:6, .Label = c("a",
"b", "c", "d", "e", "f"), class = "factor"), Apple = c(0.1, 0.2,
0.3, 0.4, NA, NA), Banana = c(NA, NA, NA, NA, 0.55, NA), Carrot = c(NA,
NA, NA, NA, NA, 0.6)), .Names = c("pat", "gene", "Apple", "Banana",
"Carrot"), row.names = c(NA, -6L), class = "data.frame")
Run Code Online (Sandbox Code Playgroud)
d是我通过的一个宽数据框reshape。我需要重新编写任何NAs …
样本数据:
df <- data.frame("ID" = 1:6,
"Group1" = c("A", NA, "C", NA, "E", "C"),
"Group2" = c("E", "C", "C", NA, "E", "E"),
"Group3" = c("A", "A", NA, NA, "C", NA),
"Group4" = c(NA, "C", NA, "D", "C", NA),
"Group5" = c("A", "D", NA, NA, NA, NA))
Run Code Online (Sandbox Code Playgroud)
在每一行中,我想计算每个值的数量并将最频繁的值存储在一个新变量中New.Group。在平局的情况下,应选择行中的第一个值。应用于示例的逻辑:
的第 1 行New.Group取值,A因为它是该行中出现频率最高的值,忽略NAs。
第 2 行有价值,C因为它也是最常见的值。
第 3 行与第 2 行相同。
第 4 行具有值,D因为它是该行中唯一的值。
在第 5 行中,E和C计数为 …
我想将一些数值重新编码为不同的数值,并使用以下代码:
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)
我哪里错了?
我有一个像这样的数据集(但有几百个变量):
id q1 g7 q3 b2 zz gl az tre
1 1 2 1 1 1 2 1 1
2 2 3 3 2 2 2 1 1
3 1 2 3 3 2 1 3 3
4 3 1 2 2 3 2 1 1
5 2 1 2 2 1 2 3 3
6 3 1 1 2 2 1 3 3
Run Code Online (Sandbox Code Playgroud)
我想保留ID,b2和tre,但是将其他所有内容都丢失了.在这个小的数据集中,我可以很容易地使用call missing (q1, g7, q3, zz, gl, az)- 但在一个包含更多变量的集合中,我实际上想说call missing (of _ALL_ *except …
如何使用方法创建一个新的整数列recode,该列为y数据框中的现有列重新编码?dfdplyr
# Generates Random data
df <- data.frame(x = sample(1:100, 50),
y = sample(LETTERS, 50, replace = TRUE),
stringsAsFactors = FALSE)
# Structure of the data
str(df)
# 'data.frame': 50 obs. of 2 variables:
# $ x: int 90 4 33 85 30 19 78 77 7 10 ...
# $ y: chr "N" "B" "P" "W" ...
# Making the character vector as factor variable
df$y <- factor(df$y)
# Structure of the data …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)
任何帮助将非常感激!谢谢
我想用尽可能少的函数调用重新编码一堆变量。我有一个 data.frame,我想在其中重新编码许多变量。我创建了一个包含所有变量名称和要执行的重新编码参数的命名列表。在这里我使用mapand没有问题dpylr。但是,当涉及到重新编码时,我发现recode从car包中使用它要容易得多,而不是使用它dpylr自己的重新编码功能。一个附带问题是是否有一种很好的方法可以用dplyr::recode.
作为下一步,我将 data.frame 分解为嵌套的 tibble。在这里,我想在每个子集中进行特定的重新编码。这就是事情变得复杂的地方,我无法再在dpylr管道中做到这一点。我唯一能工作的是一个非常丑陋的嵌套for loop.
寻找以一种漂亮而干净的方式做到这一点的想法。
让我们从简单的例子开始:
library(carData)
library(dplyr)
library(purrr)
library(tidyr)
# global recode list
recode_ls = list(
mar = "'not married' = 0;
'married' = 1",
wexp = "'no' = 0;
'yes' = 1"
)
recode_vars <- names(Rossi)[names(Rossi) %in% names(recode_ls)]
Rossi2 <- Rossi # lets save results under a different name
Rossi2[,recode_vars] <- recode_vars %>% map(~ car::recode(Rossi[[.x]],
recode_ls[.x],
as.factor = FALSE, …Run Code Online (Sandbox Code Playgroud) 有一个大型数据集,由对每个主题的相同变量的重复测量组成。示例数据如下
df<-data.frame(
"id"=c(1:5),
"ax1"=c(1,6,8,15,17),
"bx1"=c(2,16,8,15,17))
Run Code Online (Sandbox Code Playgroud)
其中“x1”是重复测量的,所以我们可以有“ax1”、“bx1”、“cx1”等等。我正在尝试重新编码这些变量。计划是将 1 和 3 到 12(包括)范围内的任何数字重新编码为 0,并将 2 或任何大于或等于 13 的值重新编码为 1。因为它涉及许多变量,我正在使用“mutate_at”来自动重新编码。此外,采用相同代码的数字不是连续的(例如,1 和 3-12 被重新编码为 0),因此我使用了嵌套的“ifelse”语句。我尝试了以下
df1<-df %>%
mutate_at(vars(ends_with("x1")),factor,
ifelse(x1>=3 & x1 <=12,0,ifelse(x1==1, 0,
ifelse(x1==2, 1,0))))
Run Code Online (Sandbox Code Playgroud)
但是,这不起作用,因为 R 无法识别“x1”。提前非常感谢对此的任何帮助。预期的输出看起来像
> df1
id ax1 bx1
1 1 0 1
2 2 0 1
3 3 0 0
4 4 1 1
5 5 1 1
Run Code Online (Sandbox Code Playgroud) 我想在不同的列中重新编码多个值。
例如:
df <- data.frame(wave = c(1,1,1,1,1,1,2,2,2,2,2,2),
party = rep(c("A", "A", "A", "B", "B", "B"), 2),
s_item = rep(c(3,4,5,1,2,6), 2),
s_item2 = rep(c(1,2,3,4,5,6), 2),
s_item3 = rep(c(6,2,3,1,5,4), 2))
Run Code Online (Sandbox Code Playgroud)
数据:
wave party s_item s_item2 s_item3
1 1 A 3 1 6
2 1 A 4 2 2
3 1 A 5 3 3
4 1 B 1 4 1
5 1 B 2 5 5
6 1 B 6 6 4
7 2 A 3 1 6
8 2 A 4 …Run Code Online (Sandbox Code Playgroud) 我有一个简单的数据框,如下所示:
Observation X1 X2 Group
1 2 4 1
2 6 3 2
3 8 4 2
4 1 3 3
5 2 8 4
6 7 5 5
7 2 4 5
Run Code Online (Sandbox Code Playgroud)
如何重新编码group变量,以便将所有非经常性观察结果重新编码为“无关联”?
所需的输出如下:
Observation X1 X2 Group
1 2 4 Unaffiliated
2 6 3 2
3 8 4 2
4 1 3 Unaffiliated
5 2 8 Unaffiliated
6 7 5 5
7 2 4 5
Run Code Online (Sandbox Code Playgroud)