R 如何将两列与偏移数据合并?

R 如何将两列与偏移数据合并?,r,multiple-columns,R,Multiple Columns,“我的数据集”包含两列,其中的数据是偏移的—类似于: col1<-c("a", "b", "c", "d", "ND", "ND", "ND", "ND") col2<-c("ND", "ND", "ND", "ND", "e", "f", "g", "h") dataset<-data.frame(cbind(col1, col2)) col1关于: sel2 <- col2!="ND" col1[sel2] <- col2[sel2] > col1 [1

“我的数据集”包含两列,其中的数据是偏移的—类似于:

col1<-c("a", "b", "c", "d", "ND", "ND", "ND", "ND")
col2<-c("ND", "ND", "ND", "ND", "e", "f", "g", "h")
dataset<-data.frame(cbind(col1, col2))
col1关于:

sel2 <- col2!="ND"
col1[sel2] <- col2[sel2]
> col1
[1] "a" "b" "c" "d" "e" "f" "g" "h"

sel2有时问题在于思考是否足够简单…;-)


dataset$combine使用
sapply
和匿名函数:

dataset[sapply(dataset, function(x) x != "ND")]
# [1] "a" "b" "c" "d" "e" "f" "g" "h"
dataset$combine <- dataset[sapply(dataset, function(x) x != "ND")]
dataset
#   col1 col2 combine
# 1    a   ND       a
# 2    b   ND       b
# 3    c   ND       c
# 4    d   ND       d
# 5   ND    e       e
# 6   ND    f       f
# 7   ND    g       g
# 8   ND    h       h
dataset[sappy(数据集,函数(x)x!=“ND”)]
#[1]“a”“b”“c”“d”“e”“f”“g”“h”

数据集$combine使用
grep
查找匹配元素并选择它们:

c(col1[grep("^[a-h]$",col1)],col2[grep("^[a-h]$",col2)])
另一种观点:

transform(dataset, 
          combine=dataset[apply(dataset, 2, function(x) x %in% letters[1:8])])
  col1 col2 combine
1    a   ND       a
2    b   ND       b
3    c   ND       c
4    d   ND       d
5   ND    e       e
6   ND    f       f
7   ND    g       g
8   ND    h       h

dataset$combine <- dataset[apply(dataset,2, function(x) nchar(x)==1)] #Also works
transform(数据集,
组合=数据集[应用(数据集,2,函数(x)x%,单位为%letters[1:8]))
col1 col2联合收割机
1和a
2b和b
3c-ndc
四维和四维
第五东
第6次飞行
第7组
第8小时

数据集$combine使用
mapply
gsub
的另一种方式:

 within(dataset, combine <- mapply(gsub, pattern='ND', replacement=col2, x=col1))
#   col1 col2 combine
# 1    a   ND       a
# 2    b   ND       b
# 3    c   ND       c
# 4    d   ND       d
# 5   ND    e       e
# 6   ND    f       f
# 7   ND    g       g
# 8   ND    h       h

in(dataset,combine)这很好,谢谢。问题是我的实际数据集(这是obv.a示例)丢失了在COL1和COL2中分散的数据,所以这个代码也会消除这些行,这是我不想做的。我想保留所有行。我可以用某种方式来代替行号,就像我在使用RBIN的例子中所做的那样。再次感谢。卢克,您可能想考虑转换<代码>“ND”。将数据读入R时,将
转换为实际的
NA
值。基本上,您可以通过某种逻辑向量组合来实现所需的功能。请查看
帮助(&)
帮助(|)<和代码>考虑并考虑“ANDANAMAHTO建议使用<代码> No>代码>,虽然您必须使用<代码>是。NA < /代码>而不是<代码> >=< /代码> .@ Mordon的 COL1 COL2可能是“代码>因子……,也许您默认设置了<代码>选项(StrassAsStase= FALSE)?
transform(dataset, 
          combine=dataset[apply(dataset, 2, function(x) x %in% letters[1:8])])
  col1 col2 combine
1    a   ND       a
2    b   ND       b
3    c   ND       c
4    d   ND       d
5   ND    e       e
6   ND    f       f
7   ND    g       g
8   ND    h       h

dataset$combine <- dataset[apply(dataset,2, function(x) nchar(x)==1)] #Also works
 within(dataset, combine <- mapply(gsub, pattern='ND', replacement=col2, x=col1))
#   col1 col2 combine
# 1    a   ND       a
# 2    b   ND       b
# 3    c   ND       c
# 4    d   ND       d
# 5   ND    e       e
# 6   ND    f       f
# 7   ND    g       g
# 8   ND    h       h