将R数据框列名与列的级别组合

将R数据框列名与列的级别组合,r,vectorization,R,Vectorization,我试图创建一个函数,将每个列名与列的级别(因子)组合起来,并返回一个带有组合名称的向量 对于数据帧 df1根据@Ananda Mahto的建议,您可以使用expand.grid和apply apply(expand.grid(colnames(df), levels(df$A)), 1, paste, collapse=":") # [1] "A:a" "B:a" "A:b" "B:b" "A:c" "B:c" 根据@Ananda Mahto的建议,您可以使用expand.grid和app

我试图创建一个函数,将每个列名与列的级别(因子)组合起来,并返回一个带有组合名称的向量

对于数据帧
df1根据@Ananda Mahto的建议,您可以使用
expand.grid
apply

apply(expand.grid(colnames(df), levels(df$A)), 1, paste, collapse=":")

# [1]  "A:a" "B:a" "A:b" "B:b" "A:c" "B:c"

根据@Ananda Mahto的建议,您可以使用
expand.grid
apply

apply(expand.grid(colnames(df), levels(df$A)), 1, paste, collapse=":")

# [1]  "A:a" "B:a" "A:b" "B:b" "A:c" "B:c"

我们可以使用
outer

c(outer(names(df), levels(df$A), FUN= paste, sep=":") )
#[1] "A:a" "B:a" "A:b" "B:b" "A:c" "B:c"
更新 如果列具有不同的级别,请重试

unlist(Map(paste, colnames(df1), lapply(df1, levels), 
                          MoreArgs= list(sep=":")), use.names=FALSE)
#[1] "A:a" "A:b" "A:c" "B:c" "B:d" "B:e"
数据
df1我们可以使用
outer

c(outer(names(df), levels(df$A), FUN= paste, sep=":") )
#[1] "A:a" "B:a" "A:b" "B:b" "A:c" "B:c"
更新 如果列具有不同的级别,请重试

unlist(Map(paste, colnames(df1), lapply(df1, levels), 
                          MoreArgs= list(sep=":")), use.names=FALSE)
#[1] "A:a" "A:b" "A:c" "B:c" "B:d" "B:e"
数据
df1看看
expand.grid
我想是吧?很难根据您的描述来判断您输入的数据是什么样的。请尝试
outer(名称(dat)、levels(dat$A)、FUN=paste、sep=“:”)
非常感谢您的建议。建议的解决方案使用特定的列名。我要找的是一个函数,它只将数据帧作为参数,并返回与该列的级别连接在一起的每个列名称。如果名为“A”的列具有“A”和“b”级别,而名为“b”的列具有“c”、“d”和“e”级别,那么从函数返回的向量将具有值“A:A”、“A:b”、“b:c”、“b:d”和“b:e”。请查看
expand.grid
我想?很难根据您的描述来判断您输入的数据是什么样的。请尝试
outer(名称(dat)、levels(dat$A)、FUN=paste、sep=“:”)
非常感谢您的建议。建议的解决方案使用特定的列名。我要找的是一个函数,它只将数据帧作为参数,并返回与该列的级别连接在一起的每个列名称。如果名为“A”的列具有级别“A”和“b”,而名为“b”的列具有级别“c”、“d”和“e”,则从函数返回的向量将具有值“A:A”、“A:b”、“b:c”、“b:d”和“b:e”。谢谢,但这并没有起作用。这将使用函数中命名的列的级别,并将其用于所有列。其他列将有不同的级别。好吧,我认为您的示例反映了实际情况dataset@chorin尝试
取消列表(Map(粘贴,colnames(df1),lappy(df1,levels),MoreArgs=list(sep=“:”)))
它对我不起作用。例如,带有v1 | v2“a”|“b”a“|”b“b”|“c”的数据帧,好的,现在我设法让它也为我工作。非常感谢。谢谢你,但这并没有起作用。这将使用函数中命名的列的级别,并将其用于所有列。其他列将有不同的级别。好吧,我认为您的示例反映了实际情况dataset@chorin尝试
取消列表(Map(粘贴,colnames(df1),lappy(df1,levels),MoreArgs=list(sep=“:”)))
它对我不起作用。例如,带有v1 | v2“a”|“b”a“|”b“b”|“c”的数据帧,好的,现在我设法让它也为我工作。非常感谢。