R中混合类型的变量

时间:2016-05-11 14:14:29

标签: r csv data-cleansing data-cleaning

更新

我使用以下命令从CSV文件导入数据库:

data.CGS <- read.csv("filepath", sep=";", na.strings=c(""," ","NA"), stringsAsFactors =F)

CSV文件中的一列具有不同类型的数据,数字,整数,百分比和字符串。

为简单起见,假设此列具有以下元素col = [1,2,1,c,2%,4%,15.5,16.5]

因此,在R中将读取此列,就像创建此变量

一样
col<-c("1","2", "c", "2%", "4%", "15.5", "16.5", "1980", "1/12/1950")

我的目的是做一些制表并根据&#34;真实&#34;计算一些统计数据。数值数据,在这个例子中是除了字母&#34; c&#34;之外的所有值。 和日期,1980年和1/12/1950。

在R中最简单的方法是什么?任何帮助将不胜感激。

当然,有一个非常简单的事情要做,即将所有元素强制为数字,但是在R中这意味着将所有字符转换为NA - 我不喜欢。

2 个答案:

答案 0 :(得分:0)

你问了很多问题。您可以将此作为示例

 col<-data.frame(var = c("1","2", "c", "2%", "4%", "15.5", "16.5"))
col
library(dplyr)

gsub您从var中的变量filter中删除%符号,从变量中移除c

col %>% mutate(var1 = gsub("%", "", var)) %>% filter(var1 != "c") %>% summarise(m_n = mean(as.numeric(var1)))

       m_n
1 6.833333

答案 1 :(得分:0)

一种方法是创建一个与任何文本字符分开的新矢量。

## Create new vector without any characters
col2 <- col[-grep("[a-zA-Z]", col)]

## To strip percentages (%)
strip_percents <- as.numeric(gsub("%", "", col2))

## All numbers except percentages
no_percents <- as.numeric(col2[-grep("%", col2)])

## Save strings in new vector
all_yo_strings <- col[grep("[a-zA-Z]", col)]

## Save percentages in a new vector
all_yo_percents <- col[grep("%", col)]
all_yo_percents <- as.numeric(gsub("%", "", all_yo_percents))/100

这是否适用于您的目的?它会保留原始col变量中的文本字符串(只需从-删除col[-grep("[a-zA-Z]", col)]即可访问该变量),同时为您提供新的数字向量。