Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/77.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_Duplicates_Columnname - Fatal编程技术网

R 如何检查行值是否与相应的列值匹配

R 如何检查行值是否与相应的列值匹配,r,duplicates,columnname,R,Duplicates,Columnname,我有一个数据框,它是通过导入几个.csv文件并随后将它们合并在一起创建的 我读到的每个数据框在第8行都有列标题,前七行有一些描述性文本 这就是出现重复行的原因-因为我不能使用第一个数据帧第8行中的值,然后丢弃其余数据帧中的前8行,或者我可以-我确信这是可能的 最终,我希望发生的是: - Read first .csv into data frame. - Take values of row 8 to be column names - Delete the first 8 rows. - Re

我有一个数据框,它是通过导入几个.csv文件并随后将它们合并在一起创建的

我读到的每个数据框在第8行都有列标题,前七行有一些描述性文本

这就是出现重复行的原因-因为我不能使用第一个数据帧第8行中的值,然后丢弃其余数据帧中的前8行,或者我可以-我确信这是可能的

最终,我希望发生的是:

- Read first .csv into data frame.
- Take values of row 8 to be column names
- Delete the first 8 rows.
- Read all other .csv files in, remove the first 8 rows from each one, and merge them all into the same data frame.
我现在面临一个问题,其中一些行将包含与其对应的列名相同的值

例如,合并的数据帧现在看起来如下所示:

--------------------------
| Name | Age | MonthBorn |
-------------------------
| Bob  | 23  | September |
| Steve| 45  | June      |
| Name | Age | MonthBorn | # Should be removed
| Sue  | 74  | January   |
| Name | Age | MonthBorn | # Should be removed
| Tracy| 31  | February  |
--------------------------
问题是,组合数据帧几乎有340000行深,因此我无法手动查看并手动检查所有内容。另外,我大致知道每一行可能出现在哪里,但我不能确定,因为有可能会发生变化


如何检查行/单元格的值是否与相应的列名匹配,或者按照上面的项目符号设置导入过程?

如果数据框大致如下所示:

Df <- Data.frame(Name, Age, MonthBorn)
然后您可以使用ifelse语句来测试MonthBorn是否出现在一行中

Df$MonthBornTest <- ifelse(Df$MonthBorn == “MonthBorn”, “True”, “False”}
然后您应该能够这样做来删除包含True的行,从而有效地删除不再需要的行

Df <- Df[!(Df$MonthBornTest == “True”), ]

如果您的数据框大致如下所示:

Df <- Data.frame(Name, Age, MonthBorn)
然后您可以使用ifelse语句来测试MonthBorn是否出现在一行中

Df$MonthBornTest <- ifelse(Df$MonthBorn == “MonthBorn”, “True”, “False”}
然后您应该能够这样做来删除包含True的行,从而有效地删除不再需要的行

Df <- Df[!(Df$MonthBornTest == “True”), ]
你的数据 输出 你的数据 输出 我们可以使用来自dplyr和tidyr的函数将所有列的内容组合在一起。然后,筛选出与合并列名相同的列名。dt2是最终输出

# Create example data
dt <- read.table(text = "Name Age MonthBorn
Bob 23 September
Steve 45 June 
Bob 23 September
Name Age MonthBorn
Sue 74 January
Name Age MonthBorn
Tracy 31 February",
                 header = TRUE, stringsAsFactors = FALSE)

# Load package
library(dplyr)
library(tidyr)

# Process the data
dt2 <- dt %>%
  unite(ColName, everything(), sep = ", ", remove = FALSE) %>%
  filter(ColName != toString(colnames(dt))) %>%
  select(-ColName)

dt2
   Name Age MonthBorn
1   Bob  23 September
2 Steve  45      June
3   Bob  23 September
4   Sue  74   January
5 Tracy  31  February
我们可以使用来自dplyr和tidyr的函数将所有列的内容组合在一起。然后,筛选出与合并列名相同的列名。dt2是最终输出

# Create example data
dt <- read.table(text = "Name Age MonthBorn
Bob 23 September
Steve 45 June 
Bob 23 September
Name Age MonthBorn
Sue 74 January
Name Age MonthBorn
Tracy 31 February",
                 header = TRUE, stringsAsFactors = FALSE)

# Load package
library(dplyr)
library(tidyr)

# Process the data
dt2 <- dt %>%
  unite(ColName, everything(), sep = ", ", remove = FALSE) %>%
  filter(ColName != toString(colnames(dt))) %>%
  select(-ColName)

dt2
   Name Age MonthBorn
1   Bob  23 September
2 Steve  45      June
3   Bob  23 September
4   Sue  74   January
5 Tracy  31  February

您是如何得到这样一个合并的data.frame的?看起来这些标题一开始就被不正确地导入了。最好是给出一个例子来说明真正发生了什么。也许从一开始就预防这个问题要比顺其自然地解决它好。@d.b我确实设置了header=TRUE。每个文件都是一个更大整体的片段,每个文件都有自己的一组相同的标题,并且是从在线数据库中提取的。导出过程会自动限制.csv大小。您是如何得到这样一个合并的data.frame的?看起来这些标题一开始就被不正确地导入了。最好是给出一个例子来说明真正发生了什么。也许从一开始就预防这个问题要比顺其自然地解决它好。@d.b我确实设置了header=TRUE。每个文件都是一个更大整体的片段,每个文件都有自己的一组相同的标题,并且是从在线数据库中提取的。导出过程会自动限制.csv大小。感谢您指出这一点。我相信OP也会想过滤掉这个,但是OP可以纠正我的错误。我编辑了我的答案来处理行,行将包含与相应列名称相同的值。谢谢你指出这一点。我相信OP也会想过滤掉这一点,但如果我弄错了,OP可以纠正我。我已经编辑了我的答案来处理行,这些行将包含与其对应的列名相同的值