繁体   English   中英

在R中的特定列上应用功能

[英]Apply function on specific columns in R

我有一个csv文件

该文件包含以下数据–

category_list,Automotive & Sports,Blanks,Cleantech / Semiconductors,Entertainment,Health,Manufacturing,"News, Search and Messaging",Others,"Social, Finance, Analytics, Advertising"
,0,1,0,0,0,0,0,0,0
3D,0,0,0,0,0,1,0,0,0
3D Printing,0,0,0,0,0,1,0,0,0
3D Technology,0,0,0,0,0,1,0,0,0
Accounting,0,0,0,0,0,0,0,0,1
Active Lifestyle,0,0,0,0,1,0,0,0,0
Ad Targeting,0,0,0,0,0,0,0,0,1
Advanced Materials,0,0,0,0,0,1,0,0,0
Adventure Travel,1,0,0,0,0,0,0,0,0

在将其加载到映射数据框中时...

mapping <- read.csv(file="mapping.csv", stringsAsFactors = FALSE,sep=",",check.names=FALSE)

数据如下(预期)- 在此处输入图片说明

我正在尝试在此文件中创建一个新列,该列将具有针对特定行的1。 例如,对于3D行,附加列应获得“制造”值。 每行只能有一个“ 1”。

当我运行此命令时–

mapping$sector_names <- lapply(apply(mapping[2:9], 1, function(x) which(x=="1")),names)

正确填充扇区名称列。 如下所示 -

在此处输入图片说明

问题是,当我对第2列到第10列使用apply函数时,该函数不起作用,在这种情况下,扇区名称中的值为NULL –

mapping$sector_names <- lapply(apply(mapping[2:10], 1, function(x) which(x=="1")),names)

在此处输入图片说明

奇怪的是,当我对第3列至第10列使用apply函数时,它工作正常……

在此处输入图片说明

简而言之,问题是当我在第2到第10列之间应用“应用”功能时,它不起作用,但任何其他组合(2到9或3到10等)都可以使用。

问题是,当我使用2到9时,apply函数返回列名和列号,但是当我使用2到10时,它仅返回列号。

例如:-每行apply(mapping[2:9], 1, function(x) which(x=="1"))

[[2]]
Blanks 
     8

而对于apply(mapping[2:10], 1, function(x) which(x=="1"))来说,每一行都是这样的……

[[1]] 2

谁能帮忙吗?

1)如果a是问题中apply的结果,则只需按它索引列名:

mapping$sector_names <- names(mapping)[-1][a]

2)替代地,将mapping1定义为矩阵,该矩阵是mapping的0-1部分(即除第一列之外的所有列),而nc1为其列数。 将该矩阵乘以向量1、2、3,...,将得到列索引为1的向量。 通过该索引向量索引mappping1的列名。 这不涉及apply命令的实例。

mapping1 <- as.matrix(mapping[-1])
nc1 <- ncol(mapping1)
mapping$sector_names <- colnames(mapping1)[mapping1 %*% seq_len(nc1)]

这给出:

> mapping$sector
[1] "Blanks"                                 
[2] "Manufacturing"                          
[3] "Manufacturing"                          
[4] "Manufacturing"                          
[5] "Social, Finance, Analytics, Advertising"
[6] "Health"                                 
[7] "Social, Finance, Analytics, Advertising"
[8] "Manufacturing"                          
[9] "Automotive & Sports"     

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM