R pivot\u更长错误:无法合并不同的类?
假设我有一个df: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 <- 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