楼主: 5752
5517 5

[问答] mutate 和 ifelse [推广有奖]

  • 1关注
  • 2粉丝

已卖:402份资源

讲师

53%

还不是VIP/贵宾

-

威望
0
论坛币
5513 个
通用积分
106.8498
学术水平
5 点
热心指数
6 点
信用等级
3 点
经验
14009 点
帖子
181
精华
0
在线时间
720 小时
注册时间
2015-9-9
最后登录
2025-5-22

楼主
5752 发表于 2021-12-28 10:56:45 |AI写论文

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

求职就业群
赵安豆老师微信:zhaoandou666

经管之家联合CDA

送您一个全额奖学金名额~ !

感谢您参与论坛问题回答

经管之家送您两个论坛币!

+2 论坛币
a=mtcars%>% mutate(hp=as.character(hp),
                   wt=as.character(wt))
b=a %>% mutate(across(hp:am,
                      ~ifelse(is.character(.),as.numeric(.),.)))

结果为什么都变成同一个值了?应该怎么修改这个程序? 111.png

二维码

扫码加我 拉你入群

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

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

关键词:else ATE ELS LSE UTA

回帖推荐

s609078902 发表于4楼  查看完整内容

要实现你的功能可以用

沙发
s609078902 发表于 2021-12-29 09:35:27
具体原因我也没弄懂,可能是由于 is.numeirc() 对整个 x 列执行了操作,返回的是一个单一元素,然后自动填充到了所有行,所以后面替换的时候同样认为该用第一个元素填充所有行,因此列就变成了同一个值。
  1. dat <- data.frame(x = 1:3, y = c("x", "y", "z"))

  2. dat %>%
  3.   mutate(z = ifelse(is.numeric(x), x, y))
复制代码
已有 1 人评分论坛币 收起 理由
cheetahfly + 10 热心帮助其他会员

总评分: 论坛币 + 10   查看全部评分

藤椅
s609078902 发表于 2021-12-29 09:41:21
我尝试使用 map() 函数进行了同样的操作,结果原本三行的 data frame 变成只剩下一行,所以应该就是我猜测的原因,is.numeric(x) 只返回单一值,之所以在 data frame 里仍显示三行是因为 data frame 有个自动填充的机制,因此替换时也只替换第一个值,剩下的也是自动填充出来的,就导致了这一列都变成了同样的值。
  1. map_df(dat, ~ ifelse(is.numeric(.x), as.character(.x), .x))
复制代码

板凳
s609078902 发表于 2021-12-29 09:55:38
要实现你的功能可以用
  1. dat %>%
  2.   mutate(across(hp:am & where(is.character), as.numeric))
复制代码

报纸
s609078902 发表于 2021-12-29 10:01:59
test test

地板
5752 发表于 2021-12-29 16:24:48
s609078902 发表于 2021-12-29 09:55
要实现你的功能可以用
谢谢~~

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

本版微信群
加好友,备注cda
拉您进交流群
GMT+8, 2026-1-24 06:54