r语言删除csv中na行_好用的R小技巧

本文介绍了R语言中处理CSV文件的技巧,包括读写文件、删除NA行、数据格式转换、统计分析以及可视化。特别讨论了如何在数据标准化、PCA分析、置换检验和循环函数等场景下进行数据处理。
摘要由CSDN通过智能技术生成

我觉得 R 是一种很神奇的语言,用好了的话事半功倍,但其间要会有很多很多坑,希望大家多多注意不要泥足深陷。

  1. 时刻注意数据类型,很多报错是因为类型不符而产生的 chr or int ?factor 也是一个很难缠的数据类型(但省位子)
  2. 经常plot一下你的处理后数据,查看是否有异常。 很简单的一步,chr 变 numeric,需要as.numeric(as.character(x)) ,这样数据才不会出错。

==================读入文件================

dat <- as.data.frame(read.table("input.csv",header = TRUE,sep = ",", dec = ".",na.strings = "NA",stringsAsFactors=FALSE,check.names = FALSE))
row.names(dat) <- dat[,1]
dat<-dat[,-1]
dat[1:5,]

5827ace4c8d03991f2ca801834eaaa8d.png

na.strings = "NA"控制缺失值
stringsAsFactors=FALSE,让每列的数据该是什么类型就是什么类型,全列数字的才自动成intdbl ,
check.names = FALSE,有行名如果是纯数字开头,会自动变成X开头,这个对后面的匹配很不友好,所以可以加这一句,避免变X。

==================写出文件================

#csv & txt
y_name=gsub("/", "&", y_name)
write.csv(d,file = paste('dat/',y_name,'.csv',sep=""),quote=F,row.names=F)

#png
png(file="metabolites_distribution_among_cancertype.png",width=2000,height=1000)
#content...
dev.off()

#pdf
pdf(file="metabolites_distribution_among_cancertype.pdf")
#content...
dev.off()

============ 删除NA行并匹配两表格 ============

#以下两种方法需要table1 和 table2 的行名是按顺序一一对应的
#先获取table1中NA的行号
dim(table1)
non_NA <- !is.na(table1[,1])
table1<-table1[non_NA,]     #(去NA行方法1)
summary(non_NA)

#如果有另一个table2 与 table1 对应,需要同样去除NA的行
table2<-as.data.frame(table2[non_NA,])
dim(table2)

#同理,也可以先获取NA的行号,使用时直接调用
non_NA <- !is.na(table2[,1])
function(data.x=table1[non_NA,], data.y=table2[non_NA,]...)

535e05315d52ba0ce5404e3e0e2ae294.png
#如果table1 和table2 的行名顺序是不一样的,需要用merge
#先获取去除table1d NA行(更新table1)
table1<-table1[complete.cases(table1),]  #(去NA行方法2)
#table1<-na.omit(table1) #(去NA行方法3)
dat_rmNA<-merge(table1,table2,by="row.names",all.x=TRUE)

==================data.frame 格式改变 ===============

#一整个data.frame(需确认全是数字)的转换
dat_n=as.data.frame(lapply(dat[,-1],as.numeric))

#字符串型label转变为numeric类型
table(dat[,1])
a <- sub("F",2,data_pca[,1])
b <- sub("M",1,a)
dat[,1] <- a                         
dat[,1] <- b
dat<-as.data.frame(data_pca)

#一整个data.frame的factor变为numeric  #is.factor也可以换成 is.character
dat_n[] <- lapply(dat, function(x) {
    if(is.factor(x)) as.numeric(as.character(x)) else x
}) 

dae54c565a7d684c4e0724fdb4bd88f2.png

==================统计每行/列有多少个0================

dat=as.data.frame(dat)
#dat[1:5,]
f<-function(x) sum(x==0)
#按列统计是2,按行统计是1
d<-as.data.frame(apply(dat,2,f))
d

#如果数据中心还有NA,则整一个会显示为NA

============ jupyter notebook 中 python 结果显示多行==========

from IPython.core.interactiveshell import InteractiveShell        
InteractiveShell.ast_node_interactivity = "all"

================初始化list或者array===========

#array
#dim=c(2,3,4),创建4个矩形矩阵,每个矩阵2行3列。
result <- array(NA,dim=c(dim(X)[2], 4, dim(Y)[2]))
rownames(result) <- colnames(X)
colnames(result) <- c("p","q","z","est")

#list
p_result <-rep(NA,length=dim(X)[2])
p_result[i] <- ...

#生成重复序列
rep(c("1","2","3"),times=c(5,42,34))

================移除/提取特定行和列============

#移除行列
dat<-dat[!rownames(dat) %in% c("12691.PC30","12691.PC10"),]
dat<-dat[,!colnames(dat) %in% c("specimen_id")]

fac55d236876a97649fdf401239c82f2.png
#提取特定行列
dat<-dat[,c("specimen_id","disease_type_consol")]
dat<-dat[c("12691.PC30","12691.PC10"),]

#按条件提取行列
dat[dat[, "HvsC"] == "Cancer",]
#多个条件提取行/指定信息
subset(dat,host_age<=50&HvsC=="Cancer")
subset(dat,host_age<=50&HvsC=="Cancer",select=specimen_id)

32448362f1b610c8243f86bc7318a7f1.png

在eset_f中,只提取dif表中有的行,并存储成selected 表

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值