r - 根据R中的其他列创建新的字符列?
问题描述
关于基于其他列创建列的类似问题已被提出。但是,似乎没有人能解决我的具体问题。
我正在尝试创建一个新列,它将混合其他列并变成一个字符。希望我下面的例子能解释我的意思。
如果我们有一个如下所示的数据框:
dfTest <- data.frame(
var = c("milk", "coffee", "honey", NA, "bread"),
value = c(2 , 7, 1, 4, 10)
)
> dfTest
var value
1 milk 2
2 coffee 7
3 honey 1
4 <NA> 4
5 bread 10
我想要做的是创建一个新列,它将同时包含var
和value
。具体来说,如果var
不是NA
,那么我希望新列显示为:var
≤ value
。如果var
是NA
,那么我只希望新列条目是value
. 例如,我的新数据框看起来像这样:
var value newCol
1 milk 2 milk ≤ 2
2 coffee 7 coffee ≤ 7
3 honey 1 honey ≤ 1
4 <NA> 4 4
5 bread 10 bread ≤ 10
关于我如何做到这一点的任何建议?
解决方案
你可以使用tidyr::unite
-
tidyr::unite(dfTest, newCol, var, value, sep = ' ≤ ', na.rm = TRUE, remove = FALSE)
# newCol var value
#1 milk ≤ 2 milk 2
#2 coffee ≤ 7 coffee 7
#3 honey ≤ 1 honey 1
#4 4 <NA> 4
#5 bread ≤ 10 bread 10
ifelse
也可以工作-
transform(dfTest, newCol = ifelse(is.na(var), value, paste(var, value, sep = ' ≤ ')))
推荐阅读
- laravel - VueJs 不适用于 Laravel 5.6
- iphone - 使用 AVFoundation 在 Iphone 照片捕获中图像捕获比闪存慢
- mysql - 执行 CMD 命令会导致 Mariadb 容器停止
- javascript - javascript在textarea中获取选定的文本
- java - java.lang.IllegalStateException:驱动程序可执行文件不存在:尝试通过 Selenium、ChromeDriver 和 Chrome 执行测试时
- javascript - 操作 Promise 返回的对象和数组
- linux - 在 bash 脚本中,count1 = `cat $affected_ip|wc -l`;echo $count1;
- yii2 - Yii2 : 设置访问控制匹配回调
- visual-studio - 为什么这个基数排序 CUDA 代码只对 32 个元素进行排序?
- command - 如何从管理面板运行所有 magento 2 命令