我试图根据其他三个变量的值编写一个新变量.具体来说,如果所有变量都是NA,我希望新变量取NA,如果它们中的任何一个是1,它应该取1,否则它应该取0.但是,我使用下面的代码遇到错误:
frame <- data.frame(x = c(NA,NA,1), x2 = c(NA, NA, 0), x3 = c(NA,0,0))
frame
y <- ifelse(is.na(frame$x) == TRUE & is.na(frame$x2) == TRUE & is.na(frame$x3) == TRUE, NA, 0)
y2 <- ifelse(frame$x == 1 | frame$x2 == 1 | frame$x3 == 1, 1, y)
Run Code Online (Sandbox Code Playgroud)
y的第二个数字正确为0,但在y2中引用时变为NA.知道为什么会这样吗?
可能是一个愚蠢的问题,我想在具有多个条件的tibble中重新编码多个变量.
数据示例:
library(tidyverse)
s <- matrix(sample(1:15, 20, replace = TRUE), ncol = 4)
s <- as_tibble(s)
Run Code Online (Sandbox Code Playgroud)
这给出了这样的东西:
# A tibble: 5 x 4
V1 V2 V3 V4
<int> <int> <int> <int>
1 11 2 5 14
2 5 4 15 5
3 13 15 2 5
4 7 13 15 11
5 11 5 12 3
Run Code Online (Sandbox Code Playgroud)
我想用这个条件重新编码V1,V2,V3,并使V4保持相等:如果值小于或等于5得1,如果值大于5但小于或等于10得到2,最后如果值超过10来3.
输出应如下所示:
# A tibble: 5 x 4
V1 V2 V3 V4
<int> <int> <int> <int>
1 3 1 1 14
2 1 1 …Run Code Online (Sandbox Code Playgroud) 我正在尝试将一些连续变量转换为类别变量,以便对其应用某些ML算法,并且我想将类别从6:00更改为12:00->“ Morning”或以ddMM格式将日期设置为“夏天”之类的。这些变量已经转换为整数。recode我认为像R中的函数一样。
+----------+
|CRSDepTime|
+----------+
| 745|
| 1053|
| 1915|
| 1755|
| 832|
| 630|
| 820|
| 945|
| 1245|
| 1645|
| 620|
| 1125|
| 2045|
| 1340|
| 1540|
| 730|
| 1145|
| 525|
| 630|
| 1520|
+----------+
Run Code Online (Sandbox Code Playgroud)
我用这句话解决了这个问题!
df = df.withColumn("Season", when(df("Month") >= 12 and df("Month") <=3, "Fall")
.when(df("Month") >= 4 and df("Month") <= 6, "Spring")
.when(df("Month") >= 7 and df("Month") <= 9, "Summer").otherwise("Autumm"))
Run Code Online (Sandbox Code Playgroud) 所以我在社会科学领域工作,我经常要做的就是操纵多个变量来改变价值观。通常这意味着扭转规模。我使用SPSS已经很长时间了,它的语法非常简单。要更改多个变量的值,请编写:
RECODE var1 var2 var3 (1=5) (2=4) 4=2) (5=1) (ELSE=COPY).
into newvar1 newvar1 newvar3.要在最后添加的新变量中编写新代码。在括号中,您可以使用hi、lo、1 to 4等内容。
现在我正在努力学习R,并且正在努力寻找完成类似工作流程的最佳方法。我找到了以下解决方案,但找不到一个简短的好方法:
## Packages -----
library(dplyr)
library(car)
## Data -----
tib <- tibble(v1 = 1:4,
v2 = 1:4,
v3 = sample(1:5, 4, replace = FALSE))
vars <- c("v1", "v2", "v3")
Run Code Online (Sandbox Code Playgroud)
基本方式:
tib$v2_rec <- NA
tib$v2_rec[tib$v2 == 1] <- 5 #1
tib$v2_rec[tib$v2 == 2] <- 4 #2
tib$v2_rec[tib$v2 == 3] <- 3 #3
tib$v2_rec[tib$v2 == …Run Code Online (Sandbox Code Playgroud) 我只是 Python 新手,正在尝试进行分析。但在此之前,我想重新编码一些变量。我想知道这个 R 代码在 Python 中是否有等价物。
df$col1 <- ifelse(df$col1 == "yes", 1, 0)
Run Code Online (Sandbox Code Playgroud)
这df是一个pandas.DataFrame并且col1是它的一列。
假设我有这个专栏。
dataframe$column<-c(1, 2, 2, 2, 3, 4, 4, 5, 5, 5, 6, 7, 8, 9, NA, NA, 0)
我得到了这个向量
vector<- c(1, 5, 9)
我需要在数据框中创建一个新列,当任何给定行中的值等于向量的任何值时,该列将返回 0。如果不相等,我想返回 0,如果该列最初有 NA,我也想返回 NA。
因此,在我的示例中,新列应如下所示:
[1] 1 0 0 0 0 0 0 1 1 1 0 0 0 1 NA NA 0
我很确定我可以使用 apply 或 sapply 来做到这一点,但我不太擅长循环。
提前致谢。
如果变量采用 dplyr 中的三个值之一,我想将其重新编码为“缺失”。考虑以下数据框have:
id married hrs_workperwk
1 1 40
2 1 55
3 1 70
4 0 -1
5 1 99
6 0 -2
7 0 10
8 0 40
9 1 45
Run Code Online (Sandbox Code Playgroud)
-1、-2 和 99 是非法值。新的数据框want应如下所示:
id married hrs_workperwk
1 1 40
2 1 55
3 1 70
4 0 NA
5 1 NA
6 0 NA
7 0 10
8 0 40
9 1 45
Run Code Online (Sandbox Code Playgroud)
我可以使用基本 R 来快速解决这个问题,但是当我已经使用mutate(). 唉,这意味着我目前使用多个嵌套if_else()函数:
want …Run Code Online (Sandbox Code Playgroud) countrycode event
1713 ESP 110mh
1009 NED HJ
536 BLR LJ
2882 FRA 1500m
509 EST LJ
2449 BEL PV
1022 EST HJ
2530 USA JT
2714 CUB JT
1236 HUN 400m
238 BLR 100m
2518 USA JT
1575 FRA 110mh
615 JPN LJ
1144 GER HJ
596 CAN LJ
2477 HUN JT
1046 GER HJ
2501 FIN DT
2176 KAZ PV
Run Code Online (Sandbox Code Playgroud)
我想在我的数据框中创建一个新的因子向量eventtype,其中:
具有行100m,400m,110mh,1500m在event可变成为分组为Runs; DT, …
我的数据如下:
Name A B C
apple 1 -1 0
banana 2 -2 1
pear -3 0 1
Run Code Online (Sandbox Code Playgroud)
我想将所有正值替换为-1,将所有负值替换为+1,但保持0为0,我该如何实现?
我正在使用包含完整月份名称的数据:
months <- c("March", "April", "May", "June", "July", "August", "September")
Run Code Online (Sandbox Code Playgroud)
是否有将它们转换为数字的函数?
非常感谢