我有以下几行代码(我在这里重新编码了年龄变量中的特定值),我想用基数R来压缩,最好压缩成一两行。
ibr.sub$Age.recode <- ibr.sub$age
ibr.sub$Age.recode <- ifelse(ibr.sub$age == 4, 3, ibr.sub$Age.recode)
ibr.sub$Age.recode <- ifelse(ibr.sub$age == 20, 18, ibr.sub$Age.recode)
ibr.sub$Age.recode <- ifelse(ibr.sub$age == 22, 24, ibr.sub$Age.recode)
ibr.sub$Age.recode <- ifelse(ibr.sub$age == 26, 24, ibr.sub$Age.recode)
ibr.sub$Age.recode <- ifelse(ibr.sub$age == 31, 30, ibr.sub$Age.recode)
4条答案
按热度按时间mwyxok5s1#
如果测试的数字是唯一可能的x值,则:
或者,如果x也有其他可能的值,则使用上面的值,并遵循以下内容
nbewdwxp2#
这里的解决方案替换为一个命名向量,您的条目数据可以有更多的值不重新编码,如果必要:
数据:
解决方案:
输出:
如果您希望将数据保存在Age. recode中,并使用来自年龄的值(不在recode vector中),则需要检查每个值是否产生
NA
,然后从年龄中获取值:输出:
recode_vec
,它只是一个命名向量(向量中的每个元素都有一个关联的名称,equal
的左侧是名称,右侧是值):这样,您就像一个字典。
ibr.sub$age
是数字,因此您可以转换为字符来处理recode_vec
(as.character(ibr.sub$age)
)。现在,要访问一个命名向量中的元素,你只需要把元素的名称放在括号中。
如果你传递一个带有名称的向量(在这里名称是
ibr.sub$age
中的值,就像字符一样),那么就转换这个向量:最后,检查
ifelse
子句值的转换,如NA
(直接使用返回逻辑值的is.na
),用列age
中的原始数据替换这些大小写。所有这些都将生成一个字符向量,因此可以选择使用as.numeric
转换为数字。8cdiaqws3#
像这样?
仅在三个指令中:
如果列
age
的值不在向量c(4, 20, 22, 26, 31)
中,则match
指令将包含NA
,索引将出错。62lalag44#
最好的方法是使用
tidyverse
。它将返回此 Dataframe (不包含col
Age
,我添加该列只是为了说明):