我有这个:
df1 <- data.frame(A = c('a', 'b', 'c'), B = c('d', 'e', 'c'))
,并希望将其转换为此:
A B
1 A:a B:d
2 A:b B:e
3 A:c B:c
我当前无法正常工作的惨痛“循环”尝试(首选使用应用版本)是这样的:
for (row in 1:nrow(df1)) {
for (col in 1:ncol(df1)) {
levels(colnames(df1)[col])[levels(colnames(df1)[col]) == df1[row, col]] <- paste0(colnames(df1)[col], ":", df1[row, col])
}
}
答案 0 :(得分:4)
使用mapply
的一种方式:
data.frame(mapply(function(x, y) paste0(y, ':', x), df1, c('A', 'B')))
# A B
#1 A:a B:d
#2 A:b B:e
#3 A:c B:c
或者您可以这样做:
data.frame(A = paste0('A:', df1$A),
B = paste0('B:', df1$B))
但是如果您有多个要使用此逻辑的列,我会选择第一个选项。
答案 1 :(得分:3)
使用from("routeId").removeHeaders("CamelServiceCall*").end();
的选项,其中我们遍历每一列,并使用lapply
列名以及列值。
paste
答案 2 :(得分:1)
如果要使用tidyverse
进行操作:
df1 %>%
rowid_to_column() %>% #Creating row IDs
gather(var, val, -rowid) %>% #Transforming the data from wide to long
mutate(temp = paste(var, val, sep = ":")) %>% #Combining the column names with the level of factors
select(-val) %>%
spread(var, temp) %>% #Transforming the data back to wide format
select(-rowid) #Deleting the redundant variable
A B
1 A:a B:d
2 A:b B:e
3 A:c B:c