在R软件,在数据库alpha中新建一个变量group,当rowname以C开头时group为NC组,当rowname以M开头时group为MT组,应该怎么写代码
时间: 2024-05-06 13:19:35 浏览: 100
假设数据库alpha已经被读取为一个数据框(data frame)对象,可以使用如下代码新建一个名为group的变量:
```
alpha$group <- ifelse(substr(row.names(alpha), 1, 1) == "C", "NC", "MT")
```
这里用到了`substr()`函数来提取每个行名的第一个字符,然后用条件语句`ifelse()`判断是否以"C"开头,是的话赋值为"NC",否则赋值为"MT"。最终结果会存储在alpha数据框的一个新列group中。
相关问题
有一个df,colname为b,rowname为a,数据为频率,如何用R把这个df变为:三列,第一列为rowname,第二列为colname,第三列为相应的数据频率
在R中,你可以使用`data.frame`或`tibble`函数来创建一个新的数据框,其中包含原始数据框`df`的rowname(a)作为新数据框的第一列,colname(b)作为第二列,对应的频率作为第三列。这里是一个简单的例子:
```r
# 假设 df 就是你的原始数据框
new_df <- data.frame(rowname = rownames(df),
colname = names(df)["b"],
freq = as.numeric(df[, "b"])) # 把频率从字符转为数值
# 或者使用 tibbles
library(tidyverse)
new_df_tidy <- df %>%
select(a, b) %>%
rename_all(~c("rowname", "colname")) %>%
mutate(freq = b, b = NULL) %>%
drop_na()
```
以上代码首先提取了rowname和colname的数据,然后将colname的数据转化为频率并保存到新的列freq中。如果你的频率不是数值类型,记得先将其转换为合适的格式(如`as.numeric()`)。
DATA=readxl::read_xlsx(path = "C:/Users/63035/Desktop/土壤微生物整理 - 副本/方差分析/细菌原始数值方差.xlsx",sheet = 1) TuRang=cbind(as.data.frame(lapply(X = as.list(DATA[,3:27]),FUN = function(x){ model=aov(formula = x~DATA$group) MM <- duncan.test(y = model,trt = "DATA$group", group=T,console=F) MM1<-MM$groups rowname<-row.names(MM1) MM2<-data.frame(rowname,MM1$'x',MM1$groups) MM2=MM2[order(factor(MM2$rowname)),] rowname<-MM2$rowname mean=MM$means[,1] sd=MM$means[,2] marker=MM2$MM1.groups Result=data.frame(round(x = mean,digits = 4),round(x = sd,digits = 4),marker) colnames(x = Result)=c("","SD","Marker") rownames(x = Result)=rowname Result } ))) 请修改脚本,使输出结果行列顺序均不改变
可以将代码中的最后一行修改为:
```
Result <- data.frame(t(Result), check.names = FALSE)
```
这样可以转置输出结果,并且保留原有的行列顺序。同时,`check.names = FALSE`参数可以保证列名不被修改。
阅读全文