楼主: dandan_9075
1887 15

R语言求助,根据旧的两个变量的不同组合生成新的变量 [推广有奖]

11
dandan_9075 在职认证  发表于 2024-6-3 20:52:54
cheetahfly 发表于 2024-5-19 11:17
我测试过,关于t的描述是这样的:
1  2  3  4  5  6  7  8  9
4 12  3  1  1  2  2  2  1
structure(list(id = c(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12,
13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28
), a = c("1", "0", "1", "0", "NA", "NA", "1", "0", "NA", "0",
"NA", "NA", "NA", "1", "NA", "1", "NA", "NA", "NA", "NA", "NA",
"NA", "NA", "NA", "NA", "NA", "NA", "NA"), b = c("0", "1", "1",
"0", "0", "1", "NA", "NA", "NA", "1", "1", "0", "NA", "0", "NA",
"NA", "0", "0", "NA", "0", "0", "1", "0", "0", "0", "0", "0",
"0"), c = c("2", "2", "2", "2", "1", "2", "2", "1", "1", "2",
"NA", "2", "NA", "2", "1", "2", "2", "2", "2", "1", "2", "2",
"2", "2", "2", "NA", "2", NA), d = c("2", "2", "2", "1", "2",
"1", "2", "2", "2", "2", "NA", "2", "2", "2", "2", "2", "1",
"2", "2", "2", "2", "2", "2", "2", "NA", "2", "NA", "2"), e = c("2",
"2", "2", "2", "2", "2", "2", "2", "1", "2", "NA", "2", "NA",
"2", "2", "2", "2", "2", "2", "1", "2", "1", "2", "2", "2", "2",
"1", "2")), class = c("tbl_df", "tbl", "data.frame"), row.names = c(NA,
-28L))

执行dput()之后是这样的

12
cheetahfly 在职认证  发表于 2024-6-4 09:00:38
dandan_9075 发表于 2024-6-3 20:52
structure(list(id = c(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12,
13, 14, 15, 16, 17, 18, 19, 20, 21, ...
你提供的数据中,a和b列都是“字符”不是“数字”,所以出错了。你加多一行转换语句:
  1. edu <- edu %>%
  2.   mutate(across(a:e, as.numeric)) %>%
  3.   mutate(m = case_when(
  4.     is.na(a) & is.na(b) ~1,
  5.     is.na(a) & b == 1 ~ 3,
  6.     is.na(a) & b == 0 ~ 2,
  7.     a == 1 & is.na(b) ~ 7,
  8.     a == 1 & b == 1 ~ 9,
  9.     a == 1 & b == 0 ~ 8,
  10.     a == 0 & is.na(b) ~ 4,
  11.     a == 0 & b == 1 ~ 6,
  12.     a == 0 & b == 0 ~ 5
  13. ))
复制代码
已有 1 人评分论坛币 学术水平 热心指数 信用等级 收起 理由
dandan_9075 + 5 + 1 + 1 + 1 精彩帖子

总评分: 论坛币 + 5  学术水平 + 1  热心指数 + 1  信用等级 + 1   查看全部评分

13
dandan_9075 在职认证  发表于 2024-6-4 09:25:18
非常感谢

14
dandan_9075 在职认证  发表于 2024-6-4 09:33:45
cheetahfly 发表于 2024-6-4 09:00
你提供的数据中,a和b列都是“字符”不是“数字”,所以出错了。你加多一行转换语句:
可以了,万分感谢,t和你的结果是一样的,但是会报如下警告,菜鸟看不懂,发出来供交流学习
Warning message:
There were 5 warnings in `mutate()`.
The first warning was:
ℹ In argument: `across(a:e, as.numeric)`.
Caused by warning:
! 强制改变过程中产生了NA
ℹ Run dplyr::last_dplyr_warnings() to see the 4 remaining warnings.
> dplyr::last_dplyr_warnings()
[[1]]
<warning/rlang_warning>
Warning in `mutate()`:
ℹ In argument: `across(a:e, as.numeric)`.
Caused by warning:
! 强制改变过程中产生了NA
---
Backtrace:
    ▆
1. ├─edu %>% mutate(across(a:e, as.numeric)) %>% ...
2. ├─dplyr::mutate(...)
3. ├─dplyr::mutate(., across(a:e, as.numeric))
4. └─dplyr:::mutate.data.frame(., across(a:e, as.numeric))

[[2]]
<warning/rlang_warning>
Warning in `mutate()`:
ℹ In argument: `across(a:e, as.numeric)`.
Caused by warning:
! 强制改变过程中产生了NA
---
Backtrace:
    ▆
1. ├─edu %>% mutate(across(a:e, as.numeric)) %>% ...
2. ├─dplyr::mutate(...)
3. ├─dplyr::mutate(., across(a:e, as.numeric))
4. └─dplyr:::mutate.data.frame(., across(a:e, as.numeric))

[[3]]
<warning/rlang_warning>
Warning in `mutate()`:
ℹ In argument: `across(a:e, as.numeric)`.
Caused by warning:
! 强制改变过程中产生了NA
---
Backtrace:
    ▆
1. ├─edu %>% mutate(across(a:e, as.numeric)) %>% ...
2. ├─dplyr::mutate(...)
3. ├─dplyr::mutate(., across(a:e, as.numeric))
4. └─dplyr:::mutate.data.frame(., across(a:e, as.numeric))

[[4]]
<warning/rlang_warning>
Warning in `mutate()`:
ℹ In argument: `across(a:e, as.numeric)`.
Caused by warning:
! 强制改变过程中产生了NA
---
Backtrace:
    ▆
1. ├─edu %>% mutate(across(a:e, as.numeric)) %>% ...
2. ├─dplyr::mutate(...)
3. ├─dplyr::mutate(., across(a:e, as.numeric))
4. └─dplyr:::mutate.data.frame(., across(a:e, as.numeric))

[[5]]
<warning/rlang_warning>
Warning in `mutate()`:
ℹ In argument: `across(a:e, as.numeric)`.
Caused by warning:
! 强制改变过程中产生了NA
---
Backtrace:
    ▆
1. ├─edu %>% mutate(across(a:e, as.numeric)) %>% ...
2. ├─dplyr::mutate(...)
3. ├─dplyr::mutate(., across(a:e, as.numeric))
4. └─dplyr:::mutate.data.frame(., across(a:e, as.numeric))

15
cheetahfly 在职认证  发表于 2024-6-4 11:26:33
dandan_9075 发表于 2024-6-4 09:33
可以了,万分感谢,t和你的结果是一样的,但是会报如下警告,菜鸟看不懂,发出来供交流学习
Warning mes ...
这是警告语句,不是出错语句,是提醒你,你的数据中有"NA"字符,无法转化为数字,将自动变为NA。

你可以无视该警告,或者,如果你有readr包的话,可以用
  1. mutate(across(a:e, readr::parse_number))
复制代码
替换
  1. mutate(across(a:e, as.numeric))
复制代码
就可以了。

16
dandan_9075 在职认证  发表于 2024-6-4 14:50:38
cheetahfly 发表于 2024-6-4 11:26
这是警告语句,不是出错语句,是提醒你,你的数据中有"NA"字符,无法转化为数字,将自动变为NA。

你可 ...
好的,谢谢

您需要登录后才可以回帖 登录 | 我要注册

本版微信群
加好友,备注jltj
拉您入交流群
GMT+8, 2026-1-9 15:46