标签: recode

基于查找向量的条件重新编码

我需要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 …

lookup r dplyr recode

5
推荐指数
1
解决办法
614
查看次数

获取每行最频繁的值并说明关系

样本数据:

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 行中,EC计数为 …

r count recode

5
推荐指数
1
解决办法
246
查看次数

在R中重新编码数值

我想将一些数值重新编码为不同的数值,并使用以下代码:

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)

我哪里错了?

r numeric recode

4
推荐指数
2
解决办法
8519
查看次数

将*most*变量设置为缺失,同时保留少数几个的内容

我有一个像这样的数据集(但有几百个变量):

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 …

sas datastep recode

4
推荐指数
1
解决办法
335
查看次数

使用 dplyr 将字符串列重新编码为整数

如何使用方法创建一个新的整数列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)

r dplyr recode

4
推荐指数
1
解决办法
7860
查看次数

R:如何一次重新编码多个变量

我的数据集中有几个变量需要以完全相同的方式进行重新编码,还有一些其他需要以不同方式重新编码的变量.我试着写一个函数来帮助我,但我遇到了麻烦.

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 dplyr recode

4
推荐指数
1
解决办法
8818
查看次数

tidyverse 中变量的一堆重新编码(功能/元编程)

我想用尽可能少的函数调用重新编码一堆变量。我有一个 data.frame,我想在其中重新编码许多变量。我创建了一个包含所有变量名称和要执行的重新编码参数的命名列表。在这里我使用mapand没有问题dpylr。但是,当涉及到重新编码时,我发现recodecar包中使用它要容易得多,而不是使用它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)

r recode purrr tidyverse

4
推荐指数
1
解决办法
1379
查看次数

如何使用 mutate_at 和嵌套的 ifelse 语句自动重新编码许多变量?

有一个大型数据集,由对每个主题的相同变量的重复测量组成。示例数据如下

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)

r dataframe dplyr recode mutate

4
推荐指数
2
解决办法
100
查看次数

在循环中跨列替换多个值

我想在不同的列中重新编码多个值。

例如:

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)

replace for-loop r dataframe recode

4
推荐指数
1
解决办法
47
查看次数

R 为所有不发生多次的观察重新编码变量

我有一个简单的数据框,如下所示:

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)

r recode

4
推荐指数
1
解决办法
65
查看次数

标签 统计

recode ×10

r ×9

dplyr ×4

dataframe ×2

count ×1

datastep ×1

for-loop ×1

lookup ×1

mutate ×1

numeric ×1

purrr ×1

replace ×1

sas ×1

tidyverse ×1