R pivot\u更长错误:无法合并不同的类?

R pivot\u更长错误:无法合并不同的类?,r,tidyr,R,Tidyr,假设我有一个df: df <- data.frame(a= "a", b = 1, col3 = "c", col4 = "d") %>% print() 我得到以下错误: Error: Can't combine `a` <factor<127a2>> and `b` <double>. 您收到此消息是因为a和b是不同的类“查看错误消息”。通过使用值\u ptypes显式定义新列类,

假设我有一个df:

df <- data.frame(a= "a", b = 1, col3 = "c", col4 = "d") %>% print()
我得到以下错误:

Error: Can't combine `a` <factor<127a2>> and `b` <double>.

您收到此消息是因为
a
b
是不同的类“查看错误消息”。通过使用
值\u ptypes
显式定义新列类,该类必须低于a和b类,才能将a和b强制转换为该类

tidyr::pivot_longer(df, 1:4, names_to = "test", values_to = "test2", 
                    values_ptypes = list(test2=character()))

# A tibble: 4 x 2
  test  test2
  <chr> <chr>
1 a     a    
2 b     1    
3 col3  c    
4 col4  d    
tidyr::pivot_longer(df,1:4,name_to=“test”,values_to=“test2”,
值\u ptypes=list(test2=character())
#一个tibble:4x2
测试2
a
2 b 1
3 col3 c
4感冒

在BaseR中,这可能更简单,您可以简单地
t
传输数据帧。因为它强制转换成矩阵,所以只需将
转换回.data.frame

as.data.frame(t(df))
#      V1
# a     a
# b     1
# col3  c
# col4  d
使用
unname
获取更清晰的行名称

as.data.frame(unname(t(df)))
#   V1
# 1  a
# 2  1
# 3  c
# 4  d
如果要将名称作为额外变量,请执行以下操作:

data.frame(V1=names(df), V2=unname(t(df)))
#     V1 V2
# 1    a  a
# 2    b  1
# 3 col3  c
# 4 col4  d

非常感谢,A.Suliman,但是当我运行你的代码时,我得到了这个错误:“错误:无法转换为。”请忽略我之前的评论,我遇到了同样的问题。你知道答案吗?@YannikSuhre确保输入列具有或可以转换为普通类型,在这种情况下,a和b可以转换为字符类型。简言之,请确保您正在合并相同类型的列,
pivot\u longer
将尝试防止您将苹果与橙子混合,如果失败,将发送错误。请参阅
?pivot\u longer
文档中的
values\u ptypes
定义。我发现必须指定
values\u transform
参数,如所示:非常感谢,@jay.sf!事实上,使用base R更直接。非常感谢
as.data.frame(unname(t(df)))
#   V1
# 1  a
# 2  1
# 3  c
# 4  d
data.frame(V1=names(df), V2=unname(t(df)))
#     V1 V2
# 1    a  a
# 2    b  1
# 3 col3  c
# 4 col4  d