首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >缺少值时禁止粘贴分隔符

缺少值时禁止粘贴分隔符
EN

Stack Overflow用户
提问于 2013-01-11 10:58:10
回答 5查看 1.5K关注 0票数 6

这是我读取到数据帧中的数据结构。

代码语言:javascript
复制
treatment  egf       mean      se
10 uM PP2            -697.25   14124.349
10 uM PP2  1 nM EGF  14715.50  8862.012
DMSO                 58589.25  7204.824
DMSO       1 nM EGF  87852.00  12149.159

处理和egf列的组合表示每个列的唯一id。我想创建一个组合了这两个元素的列,这样我就可以有一个唯一表示每一行的列。但是,由于EGF列中缺少值,所以当我使用paste时,它会执行以下令人讨厌的操作:

代码语言:javascript
复制
>paste(rawp$treatment, rawp$egf, sep=" + ")
[1] "10 uM PP2 + "         "10 uM PP2 + 1 nM EGF" "DMSO + "             
[4] "DMSO + 1 nM EGF"

当值丢失时,它仍然会将分隔符放在那里。我希望它是这样的:

代码语言:javascript
复制
[1] "10 uM PP2"         "10 uM PP2 + 1 nM EGF" "DMSO"             
[4] "DMSO + 1 nM EGF"

我该怎么做呢?

我这样做的全部原因是因为我想用ggplot绘制数据,并且在指定x轴时似乎只需要一个唯一的列。

代码语言:javascript
复制
ggplot(data=rawp, aes(x=treatment, y=mean)) + geom_bar(stat="identity")

因此,如果您还知道使用组合列指定x轴上的类别的另一种方法,那将会很有帮助。

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2013-01-11 11:48:04

使用sep = ifelse(egf == "", "", " + ")会很好,但是pastesep参数不能是向量。解决方案:将其作为常规参数传递!

代码语言:javascript
复制
with(rawp, paste0(treatment, ifelse(egf == "", "", " + "), egf))
票数 5
EN

Stack Overflow用户

发布于 2013-01-11 11:12:25

粘贴后可以去掉"+“:

代码语言:javascript
复制
sub(" \\+ $", "", paste(rawp$treatment, rawp$egf, sep=" + "))
票数 5
EN

Stack Overflow用户

发布于 2013-01-11 11:06:01

因为很难复制你的例子,所以我写了我自己的:

代码语言:javascript
复制
d <- data.frame(a=c('a', 'b', ''), b=c('c', 'd', 'e'))

你所拥有的:

代码语言:javascript
复制
paste(d$a, d$b, sep=' + ')
## [1] "a + c" "b + d" " + e" 

你想要什么:

代码语言:javascript
复制
unlist(apply(d[1:2], 1, function(x) paste(x[x!=''], collapse=' + ')))
## [1] "a + c" "b + d" "e"    

如果您使用NA而不是''作为空白值,则解决方案与此类似。在这种情况下,使用!is.na(x)而不是x!=''

这适用于具有两个以上列的情况,以及任何列中可能缺少值的情况:

代码语言:javascript
复制
d1 <- data.frame(a=c('a', 'b', ''), b=c('c', 'd', 'e'), c=c('', 'f', ''))
unlist(apply(d1, 1, function(x) paste(x[x!=''], collapse=' + ')))
## [1] "a + c"     "b + d + f" "e"     
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14270950

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档