apply()允许您分别选择MARGIN = 1或MARGIN = 2的行或列。
但仅适用于矩阵。
例如,我有三行标题信息和3列描述性信息。我需要分别将它们组合成行名,行名和列名。所以我不能轻易使用read.table()并跳过前3行,然后删除前3列以立即获取我的矩阵。
这不适用于数据框,只适用于矩阵
rownames(df)<-apply(df[,1:3], MARGIN=1,FUN=function(x){paste(x,sep=".")})
答案 0 :(得分:1)
您可以排除非数字列/行,并将apply函数部署到数字行。
考虑一个例子: 如果数据框有4列,其中第一列属于字符类,则使用下面的代码:
apply(Data.df[,2:4],2,func_name)
答案 1 :(得分:0)
首先,请注意这不是列的问题。 lapply会毫无困难地完成列
colnames(df) <- lapply(df[1:3,], function(x) {paste(x,sep=".")})
找到了rsoren的一个很好的答案here)。针对此问题进行了修改:
for (row in 1:nrow(df)) {
rownames(df)[row] <- paste(df[row,1:3],sep=".")
}
你不能用lapply做行。这是一种替代的,更直观的方法。要对行进行操作,我们首先进行转置;现在行是列,lapply可以对列进行操作。
tdf<-as.data.frame(t(df))
rownames(df) <- lapply(tdf[1:3,], function(x) {paste(x,sep=".")})
唯一的缺点是R在转置期间制作了表的副本,因此它使内存使用量翻倍。但是,rsoren的方法没有。
现在我可以删除额外的行和列,并使用正确的行名和列名创建我想要的矩阵。
myMatrix <- as.matrix(df[-(1:3),-(1:3)])