Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/arduino/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R 奇数行.names列显示在“重塑”中_R_Reshape - Fatal编程技术网

R 奇数行.names列显示在“重塑”中

R 奇数行.names列显示在“重塑”中,r,reshape,R,Reshape,我想我离解决方案太近了,我只需要一些指向正确方向的指针,我将非常感谢纠正这个问题 所以我有一个数据集,我只想把它转换成两列。下面是一个类似的虚拟数据集 1 1.1 1.2 1.3 1.4 2 2.1 2.2 2.3 2.4 3 3.1 3.2 3.3 3.4 4 4.1 4.2 4.3 4.4 它是一个csv,所以当我导入它时,R会附加它自己的头,如下所示: V1 V2 V3 V4 V5 1 1.1 1.2 1.3 1.4 2

我想我离解决方案太近了,我只需要一些指向正确方向的指针,我将非常感谢纠正这个问题

所以我有一个数据集,我只想把它转换成两列。下面是一个类似的虚拟数据集

1   1.1  1.2  1.3  1.4
2   2.1  2.2  2.3  2.4
3   3.1  3.2  3.3  3.4
4   4.1  4.2  4.3  4.4
它是一个csv,所以当我导入它时,R会附加它自己的头,如下所示:

V1  V2   V3   V4   V5
1   1.1  1.2  1.3  1.4
2   2.1  2.2  2.3  2.4
3   3.1  3.2  3.3  3.4
4   4.1  4.2  4.3  4.4
我希望它看起来像这样:

id value
1  1.1
1  1.2
1  1.3
1  1.4
2  2.1
2  2.2
...
4  4.4
问题是,这是一个正在进行的项目,数据集将有更多的列(V6、V7等),因此我无法硬编码任何内容。我保存了一个所有标题名称的列表,这似乎有效

data <- read.csv(file="location", header = FALSE)
dates = ncol(data)
list = 2:dates
variables <-paste0('V',list)
V1和V列是正确的-这是我想要的,如果没有排序,它是正确匹配的。然而,row.name和time从何而来?我可以删除time,但不能删除row.names,因为当我尝试使用newdata[,1]访问row.names列时,它会给我V1列,newdata[“row.names”]会显示“未定义的选定列”


所以,如果有人能告诉我我做错了什么,或者如何重新格式化我的重塑语句,这样这些奇怪的列就不会出现,我将非常感激。谢谢大家!

如果这是一个数据帧,您可以使用
melt()
轻松地通过重塑2来实现。比如:

newdata <- melt(data, measure.vars = 1:ncol(data))
id <- "V1"
varCols <- setdiff(names(mydf), "V1")
out <- reshape(mydf, direction = "long", idvar=id, varying=varCols, sep = "", 
               new.row.names=sequence(prod(length(varCols), nrow(mydf))))
newdata您描述的行为。。。
首先,您描述的行为来自于使用
视图
修复
,其中,如果存在
行名称
,而不仅仅是数据集中的行数序列,则在电子表格视图中,它将显示为另一列名为“行名称”的数据

下面是一个小例子:

## Sample data
df1 <- df2 <- data.frame(matrix(1:4, ncol = 2, 
                                dimnames = list(c("A", "B"), c("a", "b"))))
rownames(df2) <- NULL

fix(df1)  # R's spreadsheet view

重塑
按预期工作 第二,base R中的
reformate
函数有一个
new.row.names
参数。不幸的是,您不能简单地将其设置为
NULL
。如果要清除默认创建的奇怪的
行名称,需要将其设置为顺序向量。为此,您需要知道最终数据的长度(不同列数与原始数据集中行数的乘积)。因此,您可以执行以下操作:

newdata <- melt(data, measure.vars = 1:ncol(data))
id <- "V1"
varCols <- setdiff(names(mydf), "V1")
out <- reshape(mydf, direction = "long", idvar=id, varying=varCols, sep = "", 
               new.row.names=sequence(prod(length(varCols), nrow(mydf))))

或者,您可以执行所做的操作,然后设置
行。名称(out)是否需要将其保留在base中?我会使用
reformae2::melt(data,id.vars='V1')
melt不会安装:(软件包为2,函数为melt@rawr,这是在回避问题,而不是试图回答它。@smci,每次都会发光。老实说,我从来没有发现base R的
重塑
那么痛苦……非常感谢,但不幸的是,我无法安装重塑。不幸的是,当我尝试时,它会发出消息e:加载所需的包:重塑加载所需的包:loadNamespace中的plyr错误(再一次,它是,而不是重塑。错误消息是不言自明的;您还需要依赖项(即plyr和Rcpp)。如果您直接从CRAN安装,您应该能够自动检索依赖项。@Ironholds,这不是一个更好的答案。您的第一句话提到了“重塑2”中的
melt
,但您所有的示例都来自base R的
重塑
函数。如果我还不知道重塑数据的相关知识,我会发现这个答案非常混乱。摇头;是的,我的错误。分心了。感谢您指出这一点(将来,您当然可以通过编辑来做到这一点;)@Ironholds,根据你的回答,我不知道我的编辑应该是什么:-)
fix(df2)
View(df2)
id <- "V1"
varCols <- setdiff(names(mydf), "V1")
out <- reshape(mydf, direction = "long", idvar=id, varying=varCols, sep = "", 
               new.row.names=sequence(prod(length(varCols), nrow(mydf))))
out$time <- NULL
out
#    V1   V
# 1   1 1.1
# 2   2 2.1
# 3   3 3.1
# 4   4 4.1
# <:::SNIP:::>
# 12  4 4.3
# 13  1 1.4
# 14  2 2.4
# 15  3 3.4
# 16  4 4.4
cbind(mydf[1], stack(mydf[-1])[1])
#    V1 values
# 1   1    1.1
# 2   2    2.1
# 3   3    3.1
# 4   4    4.1
# <:::SNIP:::>
# 12  4    4.3
# 13  1    1.4
# 14  2    2.4
# 15  3    3.4
# 16  4    4.4
install.packages("reshape2") ## if it is not yet installed
library(reshape2)
out2 <- melt(mydf, id.vars="V1")
out2$variable <- NULL
out2
#    V1 value
# 1   1   1.1
# 2   2   2.1
# 3   3   3.1
# 4   4   4.1
# <:::SNIP:::>
# 12  4   4.3
# 13  1   1.4
# 14  2   2.4
# 15  3   3.4
# 16  4   4.4