Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/75.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何连接每行的列和列名,不包括r中的特定值_R - Fatal编程技术网

如何连接每行的列和列名,不包括r中的特定值

如何连接每行的列和列名,不包括r中的特定值,r,R,我有一个数据帧: df = read.table(text="X1 X2 X3 X4 X5 X6 X7 C U C D B C C D C B A C D U D C B A C D D C D U U B C D C D B D C U C D C C A B C D U D C U U C C", header

我有一个数据帧:

df = read.table(text="X1    X2  X3  X4  X5  X6  X7
C   U   C   D   B   C   C
D   C   B   A   C   D   U
D   C   B   A   C   D   D
C   D   U   U   B   C   D
C   D   B   D   C   U   C
D   C   C   A   B   C   D
U   D   C   U   U   C   C", header=T, stringsAsFactors=F)
我想分别连接每行的所有列及其列名,但不包括带有“U”的列。要找出哪些行和列有“U”,请使用

预期结果如下:

output = read.table(text="'X1 X3 X4 X5 X6 X7' 'C C D B C C'
'X1 X2 X3 X4 X5 X6'  'D C B A C D'
'X1 X2 X3 X4 X5 X6 X7' 'D C B A C D D'
'X1 X2 X5 X6 X7'  'C D B C D'
'X1 X2 X3 X4 X5 X7'  'C D B D C C'
'X1 X2 X3 X4 X5 X6 X7'  'D C C A B C D'
'X2 X3 X6 X7'  'D C C C'", header=F, stringsAsFactors=F)

我不知道如何在不使用循环的情况下获得预期的结果。谢谢。

一个更简单的选择是
应用
,使用
边距=1

t(apply(df, 1, function(x) {
            i1 <- x!="U"
            c(V1=paste(names(x)[i1], collapse=" "),
              V2= paste(x[i1], collapse=" ")) }))
或者像@RHertel提到的那样

gsub("\\sU|U\\s","",do.call(paste,df)) 

一个更简单的选择是
apply
,其中
MARGIN=1

t(apply(df, 1, function(x) {
            i1 <- x!="U"
            c(V1=paste(names(x)[i1], collapse=" "),
              V2= paste(x[i1], collapse=" ")) }))
或者像@RHertel提到的那样

gsub("\\sU|U\\s","",do.call(paste,df)) 

下面是使用
grepl
查找字符索引的另一种方法

res=t(apply(df, 1, function(x)
    c(v1=paste(names(x)[which(grepl("U", x)==F)], collapse = " "),
      v2=paste(x[which(grepl("U", x)==F)], collapse = " "))
    ))

下面是使用
grepl
查找字符索引的另一种方法

res=t(apply(df, 1, function(x)
    c(v1=paste(names(x)[which(grepl("U", x)==F)], collapse = " "),
      v2=paste(x[which(grepl("U", x)==F)], collapse = " "))
    ))

你的意思是
df!=“U”
,对吗?一个更简单的选项是
apply
使用
MARGIN=1
。i、 你的意思是
df!=“U”
,对吧?一个更简单的选择是
apply
MARGIN=1
。也就是
t(apply)(df,1,function(x){i1@RHertel谢谢你,我以前没有注意到。@RHertel谢谢你,我以前没有注意到。