【问题标题】:Issues with copying row data and Paste -> R复制行数据和粘贴的问题-> R
【发布时间】:2020-10-27 13:56:39
【问题描述】:

我有一个包含一周数据的 ascii 文件。此数据是一个文本文件,没有标题名称。我目前使用 R 几乎完成了一个较小的任务,并且也使用 Python 进行了一些尝试。作为两者的专业人士,这是一个陡峭的学习曲线。这是我的数据/代码,用于根据我在 R 中创建但不工作的特定字符序列将行粘贴在一起。

每列包含不同的数据,但最重要的是行数据。例如:

    column 1       column 2     column 3   column 4
Row 1 Name         Age           YR Birth    Date 
Row 2 Middle Name School name    siblings    # of siblings 
Row 3 Last Name     street number  street address
Row 4 Name         Age           YR Birth    Date 
Row 5 Middle Name School name    siblings    # of siblings 
Row 6 Last Name     street number  street address
Row 7 Name         Age           YR Birth    Date 
Row 8 Middle Name School name    siblings    # of siblings 
Row 9 Last Name     street number  street address 

我有一个文件夹可以迭代或循环,其中一些文件包含 100 行,而其他文件包含 1000 行。我编写了一个代码,它删除了所有我不需要的行,并写入一个新的 .csv,但是,任何粘贴和/或合并都不会产生理想的结果。

我需要的是一个代码,用于从整个文件中仅选择名称和姓氏行(及其相邻数据)并将姓氏行粘贴到名称行的末尾。每个文件的列数相同,但行数不同。

我将文件保存到数据框中,并尝试合并/粘贴/绑定(r 和 c)行/列,但结果仍然不符合我的需要。到目前为止,Rbind 工作得最好,但不是生成将行一个接一个地粘贴在同一行上的数据,而是将它们彼此并排粘贴在这样的列中: 即:

Name Last Name        Name   Last Name     Name    Last Name 
Age   Street Num      Age    Street Num     Age   Street Num
YR    Street address  YR    Street address  YR    Street address
Birth    NA            Birth    NA           Birth    NA
Date     NA            Date     NA           Date     NA

我曾尝试 rbind 他们或家人 [c(Name, Age, YR Birth...)] 但我没有成功。我查看了我有多少列,并尝试添加更多列来解决粘贴问题,而是使用第 1 行的数据填充。

我真的很茫然,如果有人能提供一些见解,我将不胜感激。我比一些人新,但不像其他人那么新。我实现的结果如下:

Name Age  YR Birth date Last Name Street Num Street Address NA NA
Name Age  YR Birth date Last Name Street Num Street Address NA NA
Name Age  YR Birth date Last Name Street Num Street Address NA NA

尝试过的代码:

rowData <- rbind(name$Name, name$Age, name$YRBirth, name$Date)

colData <- cbind(name$V1 == "Name", name$V1 == "Last Name")

合并和粘贴也不起作用。我试图将每个变量创建为新的数据框,但仍然没有达到我想要的结果。有人有什么见解吗?

【问题讨论】:

    标签: r merge row bind pasting


    【解决方案1】:

    好的,所以如果我正确理解您的情况,您想首先对数据进行切片并从第一行开始每隔三行提取一次,然后从第三行开始每第三行提取一次。我会这样做(假设你的数据在df:

    df1 <- df[3*(1:(nrow(df)/3)) - 2,]
    df2 <- df[3*(1:(nrow(df)/3)),]
    

    一旦你有了这些,你就可以把它们拍在一起,但不要使用rbind,你想使用cbind。然后您可以删除 NA 列并重命名它们。

    df3 <- cbind(df1,df2)
    df3 <- df3[1:7]
    colnames(df3) <- c("Name", "Age", "YR", "Birth date", "Last Name", "Street Num", "Street Address")
    

    【讨论】:

    • 您好,谢谢。我需要的是提取与名称或姓氏匹配的每一行(和相关的列),然后在名称的最后一行之后粘贴姓氏。对不起,我没有说得特别清楚。您是否对如何选择有想法,因为 df 将有一系列输入名称和姓氏(一个文件将有 300 行,另一个文件将有 1000 行)。我觉得挑战在于选择每 3 行,然后选择 1:7 的范围。我读对了吗?
    • 我可能不明白你的数据是如何组织的,但是数据文件中的数据是300行还是1000行,我写的方式并不重要。只要第 1、4、7 行等有名称,第 3、6、9 等行有姓氏,那么我编写的函数就会计算它们并将它们删除。然后cbind将第一个数据框的列绑定到第二个数据框的列。示例中的df3df2 的所有列旁边有df1 的所有列。然后,您可以重命名它们。
    • 谢谢。在某些情况下,第 1、4、7 行等具有名称,但在其他情况下,它将是 1、4、7、8(可能都在同一个文件中)。这就是为什么我认为我必须通过名称而不是行位置来解析它。
    • 不幸的是,代码没有成功提取正确的文件。它继续将它们全部拉出并将它们放在一行中,而不是将其绑定在“名称”的起始行旁边
    • 我认为,那么,您的数据可能比我在不访问数据本身的情况下可以有效地帮助您的结构稍差(由于隐私问题,我假设您无法以原始格式共享) )。如果您尤其可以访问 Microsoft Office 和 Excel,则可以使用其内置功能解决那里的数据导入问题。然后,您可以将其保存为更易于在 R 中加载和操作的不同格式(例如 CSV 或 Excel 文件)。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-10-31
    • 2010-10-12
    • 1970-01-01
    • 1970-01-01
    • 2023-01-07
    相关资源
    最近更新 更多