r - 创建满足某些条件的 data.fame

标签 r dataframe

输入

final_table =
  Chr     start       end   num seg.mean seg.mean.1 seg.mean.2
    1  68580000  68640000 A8430   0.7000     0.1440     0.1032
    1 115900000 116260000 B8430   0.0039     2.7202     2.7202
    1 173500000 173680000    C5  -1.7738    -0.0746    -0.2722

如何创建一个新的 data.frame,其中第 5 列到第 7 列的值设置为:

-1,如果值 < -0.679

0,如果 -0.679 <= 值 <= 0.450

+1,如果值 > 0.450

预期输出

Chr     start       end   num seg.mean seg.mean.1 seg.mean.2
  1  68580000  68640000 A8430        1          0          0
  1 115900000 116260000 B8430        0          1          1
  1 173500000 173680000    C5       -1          0          0

最佳答案

试试这个:

# read the data in
df <- read.table(header = TRUE, text="Chr     start       end        num    seg.mean    seg.mean.1   seg.mean.2
1   68580000    68640000    A8430    0.7000      0.1440     0.1032 
1   115900000   116260000   B8430    0.0039      2.7202     2.7202
1   173500000   173680000   C5      -1.7738      -0.0746    -0.2722")

# get the column-names of the columns you wanna change
cols <- names(df[5:length(df)])
# set a function for the different values you want for the value-ranges
fun_cond <- function(x) {
    ifelse(x < -0.679 , -1, ifelse(
    x >= -0.679 & x <= 0.450, 0, 1))
}
# copy the data-frame so the old one doesnt get overwritten
new_df <- df

# work with data-table to apply the function to the columns
library(data.table)
setDT(new_df)[ , (cols) := lapply(.SD, fun_cond), .SDcols = cols]

输出:

   Chr     start       end   num seg.mean seg.mean.1 seg.mean.2
1:   1  68580000  68640000 A8430        1          0          0
2:   1 115900000 116260000 B8430        0          1          1
3:   1 173500000 173680000    C5       -1          0          0

同样的事情,不使用任何额外的包:

cols <- names(df[5:length(df)])
fun_cond <- function(x) {
    ifelse(x < -0.679 , -1, ifelse(
        x >= -0.679 & x <= 0.450, 0, 1))
}

new_df <- df
new_df[5:length(df)] <- lapply(new_df[5:length(df)], fun_cond)

关于r - 创建满足某些条件的 data.fame,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30324940/

相关文章:

r - 在 Venneuler R 包中显示计数

r - 如何计算R中给定分位数的概率?

r - 如何在 R 中将图像上传到 SQL Server

r - 向数据框中的所有行添加一个常量值

python - 计算 Pandas 数据框中不同事件的每小时和 2 小时移动平均值

r - 将数据帧与 data.table 匹配

regex - R:使用 POSIX 正则表达式从字符串中提取数据

r - 从相互排斥的虚拟变量创建分类变量

r - 如何在 R 中组合两个不同长度的数据帧?

python - Pandas:在具有不同名称的字段上加入 DataFrames?