R 数据帧只有一行时进行转置

R 数据帧只有一行时进行转置,r,dataframe,apply,stringr,R,Dataframe,Apply,Stringr,我有一个data.frame,它是由许多其他操作生成的,需要进一步操作才能继续。下面是一个小例子 messy = data.frame(code = c("23740", "26501", "29458"), reducer = c("15ml", "80mm flanged", "80mm"), type = c("1_dash_2_dash_3", "adaptor", "adaptor"), stringsAsFactors = F) messy$volume = character(n

我有一个data.frame,它是由许多其他操作生成的,需要进一步操作才能继续。下面是一个小例子

messy = data.frame(code = c("23740", "26501", "29458"), 
reducer = c("15ml", "80mm flanged", "80mm"), type = c("1_dash_2_dash_3",
"adaptor", "adaptor"), stringsAsFactors = F)
messy$volume = character(nrow(messy))
messy$length = character(nrow(messy))
一般来说,它有很多行,但有时可能只有一行。我将以下代码行应用于它,以便为进一步的操作做好准备

library(stringr)
messy = data.frame(apply(messy, 2, function(x) paste(" ", str_trim(x), " ",
sep = "")), stringsAsFactors = F)
到目前为止,对于多行,一切都很好。但是,当我向它传递一行数据帧时,数据帧会发生转置,因此变得不可用

messy = messy[2,] 
str(messy) # 'data.frame':  1 obs. of  5 variables:
messy = data.frame(apply(messy, 2, function(x) paste(" ", str_trim(x), " ",
sep = "")), stringsAsFactors = F)
str(messy) # 'data.frame':  5 obs. of  1 variable:

如何防止这种行为?我在data.frame文档中看不到任何内容。我试着用I()包装凌乱,但也没用。我在第(1)行而不是第(2)列上运行了apply,但也没有成功。我非常困惑。

Hi@jogo&thnx。下面只是添加了一个逻辑列。唉,这并没有解决问题
messy=data.frame(apply(messy,2,function(x)paste(“,str_trim(x),”,sep=”“)),stringsAsFactors=F,drop=F)
data.frame调用中没有
drop=FALSE
。另外,如果您在data.frame中执行列式操作,请使用
lappy
@akrun提出了真正的问题:此处使用
apply
是错误的,应替换为
lappy
。要恢复结构,正确的行是
messy[]谢谢@akrun。换成Lappy似乎成功了。也谢谢@nicola。但我确实需要保留data.frame调用,因为lapply将其强制为列表。但我很高兴。:)