全部版块 我的主页
论坛 计量经济学与统计论坛 五区 计量经济学与统计软件
1886 15
2024-05-15
R语言求助。原有数据是这样的:数据集名称为edu
edu.xls
大小:(27 KB)

 马上下载

,数据集edu里有id、a、b、c、d、e共6个变量,a和b的值为都为0、1或者缺失(NA)三种情况,a和b如图1所示。要根据a和b不同交叉组合在数据集edu里生成一个新的变量m,两个要求:(一)要求1:
           如果 a=1b=1,则m=9

     如果 a=1且b=0,则m=8;

     如果 a=1且b=NA,则m=7;

      如果 a=0且b=1,则m=6;

     如果 a=0且b=0,则m=5;

     如果 a=0且b=NA,则m=4;

    如果 a=NA且b=1,则m=3;

    如果 a=NA且b=0,则m=2;

   如果 a=NA且b为NA,则m=1。

(二)要求2:如果两个变量a和b任意一个为1,则m为1;如果两个变量a和b都为NA,则m为NA;其余情况m都赋值为0(即a和b都为0,a为0但是b缺失,a缺失但是b为0这三种情况m都赋值为0)。

请教怎么用R实现?
         







二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

全部回复
2024-5-15 23:27:12
用dplyr里的case_when和mutate函数

mutate( m = case_when(
a == 1 & b== 1 ~ 9,
a == 1 & is.na(b) ~ 8,
a == 0 & b = 1 ~ 7,
....
)
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

2024-5-16 15:16:47
ficonay 发表于 2024-5-15 23:27
用dplyr里的case_when和mutate函数

mutate( m = case_when(
试了一下,报错:
Error in UseMethod("mutate") :
  "mutate"没有适用于"c('double', 'numeric')"目标对象的方法,请问应该怎么解决呢?还有如何实现,新生成的变量还是保存在edu这个数据集,也就是直接在edu数据集里添加一列m?
万分谢谢!!!!
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

2024-5-16 21:14:07
可以使用ifelse语句或者case_when函数来完成这个任务。以下是两种方法的示例:

方法一:使用ifelse语句

```R
edu$m <- ifelse(is.na(edu$a) & is.na(edu$b), NA,
                ifelse((edu$a == 1 | edu$b == 1), 1,
                       ifelse(edu$a == 1 & edu$b == 1, 9,
                              ifelse(edu$a == 1 & edu$b == 0, 8,
                                     ifelse(edu$a == 1 & is.na(edu$b), 7,
                                            ifelse(edu$a == 0 & edu$b == 1, 6,
                                                   ifelse(edu$a == 0 & edu$b == 0, 5,
                                                          ifelse(edu$a == 0 & is.na(edu$b), 4,
                                                                 ifelse(is.na(edu$a) & edu$b == 1, 3,
                                                                        ifelse(is.na(edu$a) & edu$b == 0, 2, 0)))))))))
```

方法二:使用case_when函数(需要dplyr库)

```R
library(dplyr)

edu <- edu %>%
  mutate(m = case_when(
    is.na(a) & is.na(b) ~ NA_real_,
    a == 1 | b == 1 ~ 1,
    a == 1 & b == 1 ~ 9,
    a == 1 & b == 0 ~ 8,
    a == 1 & is.na(b) ~ 7,
    a == 0 & b == 1 ~ 6,
    a == 0 & b == 0 ~ 5,
    a == 0 & is.na(b) ~ 4,
    is.na(a) & b == 1 ~ 3,
    is.na(a) & b == 0 ~ 2,
    TRUE ~ 0
  ))
```

上述代码会根据你提供的要求在edu数据集中创建一个新变量m。你可以选择你喜欢的方法进行操作。

此文本由CAIE学术大模型生成,添加下方二维码,优先体验功能试用



二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

2024-5-17 10:20:33
实现是
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

2024-5-17 12:07:22
赵安豆 发表于 2024-5-16 21:14
可以使用ifelse语句或者case_when函数来完成这个任务。以下是两种方法的示例:

方法一:使用ifelse语句
感谢!
按照上述方法之一试了一下

edu <- edu %>%
  mutate(m = case_when(
    a == 1 & b == 1 ~ 9,
    a == 1 & b == 0 ~ 8,
    a == 1 & is.na(b) ~ 7,
    a == 0 & b == 1 ~ 6,
    a == 0 & b == 0 ~ 5,
    a == 0 & is.na(b) ~ 4,
    is.na(a) & b == 1 ~ 3,
    is.na(a) & b == 0 ~ 2,
    is.na(a) & is.na(b) ~1))

t<-table(edu$m,useNA="ifany")
t
关于m的描述如下:
5    6    8    9 <NA>
1    2    2    1   22

但是不正确,比如edu里原来有4行a和b都缺失,新产生的变量m=1应该有4行,但是没有m=1的,请问怎么解决呢?
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

点击查看更多内容…
相关推荐
栏目导航
热门文章
推荐文章

说点什么

分享

扫码加好友,拉您进群
各岗位、行业、专业交流群