在数据框上使用 If/Else

问题描述 投票:0回答:2

我有一个看起来像这样的数据集

data<-c(0,1,2,3,4,2,3,1,4,3,2,4,0,1,2,0,2,1,2,0,4)
frame<-as.data.frame(data)

我现在想在此数据框中创建一个新变量。如果“数据”列报告的数字为 2 或更多,我希望它在该行中具有“2”,如果有 1 或 0(例如前两个观察值),我希望新变量具有“1”表示该观察结果。

我正在尝试使用以下代码来执行此操作:

frame$twohouses<- if (any(frame$data>=2)) {frame$twohouses=2} else {frame$twohouses=1}

但是,如果我运行这 3 行脚本,“twohouses”列中的每个观察值都会用 2 进行编码。但是,其中一些观察值应该用 1 进行编码。

所以我的问题是:我的 if else 行或脚本做错了什么?或者有其他方法可以做到这一点。

我的问题与此类似: 对 R 中的因子使用 ifelse

但是没有人回答这个问题。

r dataframe if-statement
2个回答
71
投票

使用

ifelse

frame$twohouses <- ifelse(frame$data>=2, 2, 1)
frame
   data twohouses
1     0         1
2     1         1
3     2         2
4     3         2
5     4         2
...
16    0         1
17    2         2
18    1         1
19    2         2
20    0         1
21    4         2

if
ifelse
的区别:

  • if
    是一个控制流语句,采用单个逻辑值作为参数
  • ifelse
    是一个向量化函数,将向量作为其所有参数。

通过

if
访问
?"if"
的帮助页面也会将您指向
?ifelse


4
投票

试试这个

frame$twohouses <- ifelse(frame$data>1, 2, 1)
 frame
   data twohouses
1     0         1
2     1         1
3     2         2
4     3         2
5     4         2
6     2         2
7     3         2
8     1         1
9     4         2
10    3         2
11    2         2
12    4         2
13    0         1
14    1         1
15    2         2
16    0         1
17    2         2
18    1         1
19    2         2
20    0         1
21    4         2
© www.soinside.com 2019 - 2024. All rights reserved.