Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ajax/6.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 将两个标题合并为一个标题_R - Fatal编程技术网

R 将两个标题合并为一个标题

R 将两个标题合并为一个标题,r,R,非常简单的问题。我使用的excel表格有两行作为列标题;如何将这两个行标题转换为一个?此外,这些标题并不从工作表的顶部开始 因此,我有DF1 Temp Press Reagent Yield A Conversion etc degC bar /g % % 1 2 3 4 5 6 7 8 9 10 我想 Temp degC

非常简单的问题。我使用的excel表格有两行作为列标题;如何将这两个行标题转换为一个?此外,这些标题并不从工作表的顶部开始

因此,我有DF1

Temp Press  Reagent  Yield A  Conversion etc
degC bar    /g       %        %             
1    2      3        4        5          
6    7      8        9        10
我想

Temp degC Press bar  Reagent /g  Yield A % Conversion etc
1         2          3           4         5          
6         7          8           9        10

使用colnames(DF1)返回上面的名称,但是让第二行与上面的一行合并一直让我感到困惑。

这应该行得通。读取数据时,只需将stringsAsFactors设置为FALSE

data <- structure(list(Temp = c("degC", "1", "6"), Press = c("bar", "2", 
"7"), Reagent = c("/g", "3", "8"), Yield.A = c("%", "4", "9"), 
    Conversion = c("%", "5", "10")), .Names = c("Temp", "Press", 
"Reagent", "Yield.A", "Conversion"), class = "data.frame", row.names = c(NA, 
-3L)) # Your data

colnames(data) <-paste(colnames(dados),dados[1,]) # Set new names
data <- data[-1,] # Remove first line

data <- data.frame(apply(data,2,as.real)) # Correct the classes (works only if all collums are numbers)

数据这应该是可行的。读取数据时,只需将stringsAsFactors设置为FALSE

data <- structure(list(Temp = c("degC", "1", "6"), Press = c("bar", "2", 
"7"), Reagent = c("/g", "3", "8"), Yield.A = c("%", "4", "9"), 
    Conversion = c("%", "5", "10")), .Names = c("Temp", "Press", 
"Reagent", "Yield.A", "Conversion"), class = "data.frame", row.names = c(NA, 
-3L)) # Your data

colnames(data) <-paste(colnames(dados),dados[1,]) # Set new names
data <- data[-1,] # Remove first line

data <- data.frame(apply(data,2,as.real)) # Correct the classes (works only if all collums are numbers)

data使用您的数据,修改为引用包含分隔符的文本字段(获取用于生成文件的任何工具,以便为您引用文本字段!)

运行时,代码将生成:

> dat <- read.table(text = txt, skip = 2)
> labs <- read.table(text = txt, nrows = 2, stringsAsFactors = FALSE)
> names(dat) <- sapply(labs, paste, collapse = " ")
> 
> dat
  Temp degC Press bar Reagent /g Yield A % Conversion etc %
1         1         2          3         4                5
2         6         7          8         9               10
> names(dat)
[1] "Temp degC"        "Press bar"        "Reagent /g"      
[4] "Yield A %"        "Conversion etc %"
>dat实验室名称(dat)
>dat
温度degC压杆试剂/g产率A%转化率等%
1         1         2          3         4                5
2         6         7          8         9               10
>姓名(dat)
[1] “温度degC”“压力条”“试剂/g”
[4] “产生%”“转换等%”
在您的情况下,您需要修改
read.table()
调用以指向文件系统上的文件,因此使用
file=“foo.txt”
代替代码块中的
text=txt
,其中
“foo.txt”
是您的文件名


此外,如果这些标题不是从文件顶部开始,则将
skip
增加到
2+n
,其中
n
是两个标题行之前的行数。您还需要将
skip=n
添加到生成
labs
的第二个
read.table()
调用中,其中
n
再次是标题行之前的行数。

使用您的数据,修改为引用包含分隔符的文本字段(获取用于生成文件以引用文本字段的任何工具!)

运行时,代码将生成:

> dat <- read.table(text = txt, skip = 2)
> labs <- read.table(text = txt, nrows = 2, stringsAsFactors = FALSE)
> names(dat) <- sapply(labs, paste, collapse = " ")
> 
> dat
  Temp degC Press bar Reagent /g Yield A % Conversion etc %
1         1         2          3         4                5
2         6         7          8         9               10
> names(dat)
[1] "Temp degC"        "Press bar"        "Reagent /g"      
[4] "Yield A %"        "Conversion etc %"
>dat实验室名称(dat)
>dat
温度degC压杆试剂/g产率A%转化率等%
1         1         2          3         4                5
2         6         7          8         9               10
>姓名(dat)
[1] “温度degC”“压力条”“试剂/g”
[4] “产生%”“转换等%”
在您的情况下,您需要修改
read.table()
调用以指向文件系统上的文件,因此使用
file=“foo.txt”
代替代码块中的
text=txt
,其中
“foo.txt”
是您的文件名


此外,如果这些标题不是从文件顶部开始,则将
skip
增加到
2+n
,其中
n
是两个标题行之前的行数。您还需要将
skip=n
添加到第二个
read.table()
调用,该调用生成
labs
,其中
n
再次是标题行之前的行数。

只需使用
read.table(file,header=FALSE,stringsAsFactors=F)
参数加载文件。然后,您可以
grep
找到发生这种情况的位置

df <- data.frame(V1=c(sample(10), "Temp", "degC"), 
                 V2=c(sample(10), "Press", "bar"), 
                 V3 = c(sample(10), "Reagent", "/g"), 
                 V4 = c(sample(10), "Yield_A", "%"), 
                 V5 = c(sample(10), "Conversion", "%"), 
                 stringsAsFactors=F)
idx <- unique(c(grep("Temp", df$V1), grep("degC", df$V1)))
df2 <- df[-(idx), ]
names(df2) <- sapply(df[idx, ], function(x) paste(x, collapse=" "))

df只需使用
read.table(file,header=FALSE,stringsAsFactors=F)
参数加载文件。然后,您可以
grep
找到发生这种情况的位置

df <- data.frame(V1=c(sample(10), "Temp", "degC"), 
                 V2=c(sample(10), "Press", "bar"), 
                 V3 = c(sample(10), "Reagent", "/g"), 
                 V4 = c(sample(10), "Yield_A", "%"), 
                 V5 = c(sample(10), "Conversion", "%"), 
                 stringsAsFactors=F)
idx <- unique(c(grep("Temp", df$V1), grep("degC", df$V1)))
df2 <- df[-(idx), ]
names(df2) <- sapply(df[idx, ], function(x) paste(x, collapse=" "))

df请让您的示例重现,并查看
merge
。这很难(对我来说)为了使示例具有可复制性,因为我正在从excel工作表复制到剪贴板,并通过read.table将数据导入R。将数据从excel转储到
.csv
文件,然后上载文件。我已使用该方法将所有的数据碎片收集在一起,但excel的合并和中心功能不太好。请重新创建您的示例ducible,看看
合并
。这很难(对我来说)使示例可复制,因为我正在从excel工作表复制到剪贴板,并通过read.table将数据导入R。从excel将数据转储到
.csv
文件中,然后上载文件。我曾用它将所有的数据碎片收集在一起,但excel的合并和中心功能不太好。@Arun我错过了要点a关于标题不在文件顶部。只需增加适当的行数即可。添加到答案中。“获取用于生成文件的任何工具,为您引用文本字段!”我使用read.table(file=“clipboard”,header=TRUE,sep=“\t”)给我我的表格。我正在琢磨如何将其转换为文本字符串。我刚刚尝试过,singleString然后不使用剪贴板。将其复制/粘贴到一个新的Excel工作表,其中只包含该数据。然后将工作表导出为CSV,并确保Excel引用文本字符串(标题),否则,如果使用空格作为分隔符,R如何区分单个单元格标题中的空格与相邻单元格标题中的空格之间的区别?更严重的是,复制/粘贴是不可复制的;从工作流程中消除这一点,你会发现事情会变得更简单。你不会相信这一点,但是为了了解如何在excel中引用,我偶然发现了concatentate函数。我用它将excel中的两个标题折叠为一个,导出为csv,并将其导入R。(感谢您提供的有关从剪贴板粘贴的提示)@Arun我忽略了标题不在文件顶部这一点。只需增加适当的行数即可。添加到答案中。“获取用于生成文件的任何工具,为您引用文本字段!”我使用read.table(file=“clipboard”,header=TRUE,sep=“\t”)把我的表格给我。我在琢磨如何将它转换成文本字符串。我刚刚尝试过,singleString然后不使用剪贴板。你用它复制/粘贴到一个新的Excel工作表怎么样