R 如何编写一个简单的分类器并从中生成一个合并的数据帧

R 如何编写一个简单的分类器并从中生成一个合并的数据帧,r,loops,data-manipulation,R,Loops,Data Manipulation,我有一个像这样的df >df[1:6,1:6] > ABT.263 ABT.869 ABT.888 AC220 Afatinib Afatinib.rescreen. > BT-20 1 1 1 1 0 1 > CAL-120 0 1 1 1 1 1 >

我有一个像这样的df

>df[1:6,1:6]

>            ABT.263 ABT.869 ABT.888 AC220 Afatinib Afatinib.rescreen.
> BT-20          1       1       1     1        0                  1
> CAL-120        0       1       1     1        1                  1
> CAL-51         1       1       1     1        1                  1
> CAL-85-1       1       1       1     1        1                  0
> DU-4475        0       1       1     1        1                  1
> HCC1143        1       1       1     1        0                  1
> final_df[1:6,1:4]

>            ABT.263_1    ABT.263_0    ABT.869_1    ABT.869_0
>               BT-20       CAL-120      BT-20         NA
>               CAL-51      DU-4475      CAL-120
>               CAL-85-1                 CAL-51
>               HCC1143                  CAL-85-1
>                                        DU-4475
>                                        HCC1143
基本上,我想提取每列行名称的1和0。然后将它们以循环的形式放入相邻的列中

期望的输出是这样的

>df[1:6,1:6]

>            ABT.263 ABT.869 ABT.888 AC220 Afatinib Afatinib.rescreen.
> BT-20          1       1       1     1        0                  1
> CAL-120        0       1       1     1        1                  1
> CAL-51         1       1       1     1        1                  1
> CAL-85-1       1       1       1     1        1                  0
> DU-4475        0       1       1     1        1                  1
> HCC1143        1       1       1     1        0                  1
> final_df[1:6,1:4]

>            ABT.263_1    ABT.263_0    ABT.869_1    ABT.869_0
>               BT-20       CAL-120      BT-20         NA
>               CAL-51      DU-4475      CAL-120
>               CAL-85-1                 CAL-51
>               HCC1143                  CAL-85-1
>                                        DU-4475
>                                        HCC1143
我可以分别提取0个单元格和1个单元格的行名

  value1 <- rownames(df)[which(df[,1] == 1)]

  value0 <- rownames(df)[which(df[,1] == 0)]

不太确定,因为我没有完全理解您想要的输出。。。 但是这里有一个使用
data.table
-包的方法

#load library
library(data.table)

#first, create the sample data
#note, rownames are stored in their own column, 'row_name'
dt <- fread("row_name            ABT.263 ABT.869 ABT.888 AC220 Afatinib Afatinib.rescreen.
BT-20          1       1       1     1        0                  1
CAL-120        0       1       1     1        1                  1
CAL-51         1       1       1     1        1                  1
CAL-85-1       1       1       1     1        1                  0
DU-4475        0       1       1     1        1                  1
HCC1143        1       1       1     1        0                  1")

#melt the data to long format, using the 'row_name'-column as identifier
dt.melt <- melt( dt, id.vars = "row_name" )

#now summarise, pasting together row_names by variable-value combination
dt.melt[, .( row = paste0( row_name, collapse = ";" ) ), 
        by = .( value = paste0( variable, "_", value ) ) ]

#                   value                                           row
# 1:            ABT.263_1                 BT-20;CAL-51;CAL-85-1;HCC1143
# 2:            ABT.263_0                               CAL-120;DU-4475
# 3:            ABT.869_1 BT-20;CAL-120;CAL-51;CAL-85-1;DU-4475;HCC1143
# 4:            ABT.888_1 BT-20;CAL-120;CAL-51;CAL-85-1;DU-4475;HCC1143
# 5:              AC220_1 BT-20;CAL-120;CAL-51;CAL-85-1;DU-4475;HCC1143
# 6:           Afatinib_0                                 BT-20;HCC1143
# 7:           Afatinib_1               CAL-120;CAL-51;CAL-85-1;DU-4475
# 8: Afatinib.rescreen._1          BT-20;CAL-120;CAL-51;DU-4475;HCC1143
# 9: Afatinib.rescreen._0                                      CAL-85-1
#加载库
库(数据表)
#首先,创建示例数据
#注意,行名存储在它们自己的列“row_name”中

dt不太确定,因为我没有完全理解您想要的输出。。。 但是这里有一个使用
data.table
-包的方法

#load library
library(data.table)

#first, create the sample data
#note, rownames are stored in their own column, 'row_name'
dt <- fread("row_name            ABT.263 ABT.869 ABT.888 AC220 Afatinib Afatinib.rescreen.
BT-20          1       1       1     1        0                  1
CAL-120        0       1       1     1        1                  1
CAL-51         1       1       1     1        1                  1
CAL-85-1       1       1       1     1        1                  0
DU-4475        0       1       1     1        1                  1
HCC1143        1       1       1     1        0                  1")

#melt the data to long format, using the 'row_name'-column as identifier
dt.melt <- melt( dt, id.vars = "row_name" )

#now summarise, pasting together row_names by variable-value combination
dt.melt[, .( row = paste0( row_name, collapse = ";" ) ), 
        by = .( value = paste0( variable, "_", value ) ) ]

#                   value                                           row
# 1:            ABT.263_1                 BT-20;CAL-51;CAL-85-1;HCC1143
# 2:            ABT.263_0                               CAL-120;DU-4475
# 3:            ABT.869_1 BT-20;CAL-120;CAL-51;CAL-85-1;DU-4475;HCC1143
# 4:            ABT.888_1 BT-20;CAL-120;CAL-51;CAL-85-1;DU-4475;HCC1143
# 5:              AC220_1 BT-20;CAL-120;CAL-51;CAL-85-1;DU-4475;HCC1143
# 6:           Afatinib_0                                 BT-20;HCC1143
# 7:           Afatinib_1               CAL-120;CAL-51;CAL-85-1;DU-4475
# 8: Afatinib.rescreen._1          BT-20;CAL-120;CAL-51;DU-4475;HCC1143
# 9: Afatinib.rescreen._0                                      CAL-85-1
#加载库
库(数据表)
#首先,创建示例数据
#注意,行名存储在它们自己的列“row_name”中

dtbase
R
解决方案和向量列表也是可能的:

代码:

names <- names(df)
#
l1 <- list()
for(i in 1:length(df)){
l1[[i]] <- rownames(df)[which(df[,names[i]] == 1)]
}

这是在
数据框中带有1的名称列表,可以相同地获得0的列表。

也可以使用向量列表的基本
R
解决方案:

代码:

names <- names(df)
#
l1 <- list()
for(i in 1:length(df)){
l1[[i]] <- rownames(df)[which(df[,names[i]] == 1)]
}

这是在
数据框中带有1的姓名列表。框架
,可以以相同方式获得0的列表。

您可以通过共享
dput(head(df,20))
的输出,让人们更容易帮助您,其中df是您的数据框。我已将您的建议的输出添加到问题中。谢谢您的时间。您的请求的问题是,所需的输出是不可能的:数据帧只允许等长的列。是的,我以前尝试过它时遇到过维度问题。将它们保存在哪种数据结构中比较实用?我正在考虑列表列表…您可以通过共享
dput(head(df,20))
的输出,让人们更容易地帮助您,其中df是您的数据帧。我已将您建议的输出添加到问题中。谢谢您的时间。您的请求的问题是,所需的输出是不可能的:数据帧只允许等长的列。是的,我以前尝试过它时遇到过维度问题。将它们保存在哪种数据结构中比较实用?我正在考虑名单…非常感谢你的帮助和简短的解释。我没想过要融化和重塑。这对我的问题很有帮助。非常感谢你的帮助和简短的解释。我没想过要融化和重塑。它对我的问题起了很大的作用。