假设我有这个数据框,我想根据以下条件创建它的子集。
df=pd.DataFrame({'file':[1205,2897,1205,1205,4312,1322,1242,52,2897,111],
'department':[finance,finance,IT,marketing,marketing,IT,finance,IT,marketing,IT],
'status':[1,1,1,1,1,1,1,1,1,1],
})
Run Code Online (Sandbox Code Playgroud)
file department status
0 1205 finance 1
1 2897 finance 1
2 1205 IT 1
3 1205 marketing 1
4 4312 marketing 1
5 1322 IT 1
6 1242 finance 1
7 52 IT 1
8 2897 marketing 1
9 111 IT 1
Run Code Online (Sandbox Code Playgroud)
我有一个看起来像这样但更大的 df :
values <- c(22,16,23,15,14.5,19)
groups <- rep(c("a","b"), each = 3)
df <- data.frame(groups, values)
Run Code Online (Sandbox Code Playgroud)
我每组有 1-3 个值(在示例中,a 组有 3 个值,b 组有 3 个值)。我现在想从每组中排除最不同的值。在此示例中,我想排除 a 16 和 b 19。
感谢您的帮助!
我有一个数据框,其中包含一列,其中前一行和当前行之间存在时间差(以小时为单位)。这些行本身就是一个长序列。
我想要对数据帧进行子集化,以便时间差异是规则的 (16 小时),并删除不属于 16 小时“步骤”的行。然而,在计算中不应该仅仅跳过NA时间差(例如,时间差为8、8的行一起是16小时的步长,但具有8、NA、8的三行则不是)。相反,应从此 NA 开始重新计算 16 小时的时间差。
因此,如果一个或多个时间差为 4 或 8 小时,但加起来不能减少到 16 小时的单个步骤,则各个值也应变为 NA,请参见下文。
当第1-3行或1-4行之间形成16小时的步长时,应分别删除第2行或2-3行。
不幸的是,之前提供的答案似乎不适用于我的数据,输出中仅保留了“16h 步骤”的一小部分。我在下面提供了一个新示例,因为我的示例可能不具有代表性,以及给我的代码
输入:
test
ID Datetime diff_h
134_18 7/27/2018 0:00 NA
134_18 7/27/2018 19:00 19
134_18 7/28/2018 0:00 5
134_18 7/28/2018 8:00 8
134_18 7/28/2018 16:00 8
134_18 7/29/2018 0:00 8
134_18 7/29/2018 8:00 8
134_18 7/29/2018 12:00 4
134_18 7/30/2018 16:00 4
134_18 7/30/2018 20:00 4
134_18 7/30/2018 16:00 8
134_18 7/31/2018 0:00 8
134_18 7/31/2018 8:00 8
134_18 7/31/2018 …Run Code Online (Sandbox Code Playgroud) 我有一个数据框
players games
------- ------
roger tennis
messi football
agasi tennis
Run Code Online (Sandbox Code Playgroud)
现在我想获得一个只包含game = tennis的数据框
player games
roger tennis
agasi tennis
Run Code Online (Sandbox Code Playgroud)
如何使用R语言提取仅包含games = tennis的数据框?
f1 <- function(x) {
zx1 <- sample(1:nrow(zone4[[x]]), nrow(zone4[[x]]), replace=F)
zone4[[x]]$randnums <- zx1
}
f1(1)
## DOESN'T UPDATE zone4[[1]]
zx2 <- sample(1:nrow(zone4[[1]]), nrow(zone4[[1]]), replace=F)
zone4[[1]]$randnums <- zx2
## DOES UPDATE zone[[1]]
Run Code Online (Sandbox Code Playgroud)
如果我创建一个如上所示的函数f1(),则不会更新对象'zone4 [[x]]'.但是,如果我运行与上面相同的命令但显式地声明'x',如下所示,则更新对象'zone4 [[x]]'.为什么会这样?我想知道,因为我想运行代码的迭代.如果在上面的函数f1()的定义中,我写了"names(zone4 [[x]])",那么我得到的输出告诉我该函数做了它应该做的,但是当再次查询时,zone [[ x]]似乎没有变化.谢谢您的帮助.这个想法是为给定年份和另一个变量区域的数据集的每个子集创建随机数.数据集最初是单个数据框,但我使用split()函数根据年份和区域分离数据,其中有4个.也许有更好的方法将随机数分配给特定的数据子集而不用使用split()函数?
我有一个复杂的问题,我将通过简化我的数据集来尝试简化.说我有5个变量:
df$Id <- c(1:12)
df$Date <- c(NA,NA,a,a,b,NA,NA,b,c,c,b,a)
df$va <- c(1.1, 1.4, 2.5, ...) #12 randoms values
df$vb <- c(5.9, 2.3, 4.7, ...) #12 other random values
df$vc <- c(3.0, 3.3, 3.7, ...) #12 more random values
Run Code Online (Sandbox Code Playgroud)
然后我想创建一个新变量,如果日期等于a,b或c,则从va,vb或vc获取值.我曾尝试过嵌套的if-else,但是没有用.我也尝试过:
df$new[df$date=='a' & !is.na(df$date)] <- df$va
df$new[df$date=='b' & !is.na(df$date)] <- df$vb
df$new[df$date=='c' & !is.na(df$date)] <- df$vc
Run Code Online (Sandbox Code Playgroud)
这正确地将NA保留在新变量中,其中Date = NA,但是提供的值不是来自va,vb或vc,而是一些其他值.如果日期为'a',如果日期为'b',如果日期为'c',则如何获得等于va的df $ new;如果日期为'c',则为vc?
我有一个清单:
name_lst <- list(one = c("John", "Paul", "Ringo", "Kramer"),
two = c("Jerry", "Kramer", "George", "Elaine"))
Run Code Online (Sandbox Code Playgroud)
我想从中删除“ Kramer” name_lst[[SOME_VECTOR]],但返回列表的其余部分。希望输出为:
name_lst
$one
[1] "John" "Paul" "Ringo"
$two
[1] "Jerry" "Kramer" "George" "Elaine"
Run Code Online (Sandbox Code Playgroud)
理想情况下,我可以删除整个名称,而不仅仅是“ Kramer”(例如,! %in% c("George", "Kramer")。
name_lst[name_lst[1] != "Kramer"]
name_lst[name_lst[[1]] != "Kramer"]
name_lst[name_lst$one != "Kramer"]
name_lst[!(name_lst$one %in% "Kramer")]
name_lst[[name_lst[1] != "Kramer"]]
name_lst[[name_lst[[1]] != "Kramer"]]
name_lst[[name_lst$one != "Kramer"]]
name_lst[[!(name_lst$one %in% "Kramer")]]
Run Code Online (Sandbox Code Playgroud)
这些都返回错误或相同列表,而没有任何更改。
我有一个像这样的数据框:
x1= c("Station 1", "Station 1", "Station 2", "Station 3", "Station 3", "Station 3")
x2= c("1993-06-08", "1994-06-09", "1982-06-10", "1993-06-11", "1992-06-12", "1997-06-13")
x3= seq(5, 30, length=6)
x4= seq(4, 16, length=6)
x5= seq(10, 60, length=6)
testframe = data.frame(Station=x1, Date=x2, Morning=x3, Noon=x4, Evening=x5)
testframe[,2] = as.Date(testframe[,2], format="%Y-%m-%d")
class(testframe$Date)
Run Code Online (Sandbox Code Playgroud)
现在我想删除 1993 年 1 月 1 日之前记录的所有行。
我这样做了:
index = testframe[,2] >= "1993-01-01"
Run Code Online (Sandbox Code Playgroud)
它返回正确和错误的正确列表,但我不知道如何继续。
我尝试过这个,但没有成功:
new = testframe[index]
new = [-c(testframe[index]),]
Run Code Online (Sandbox Code Playgroud)
有人可以帮忙吗?我知道这应该很容易,但我不明白。
我有一个数据框,该数据框是1961年至2018年间每月分辨率的气象测量的时间序列。我对测量月平均温度的变量感兴趣,因为我需要夏季的多年平均温度。
为此,我必须从“ DateVaraible”列中过滤出第五和第六位数字,即月份。时间列中的值的格式如下:“ 19610701”。所以我需要1961年以后的07(Juli)。
我开始为其他目的编码1个月,所以我没有尝试任何值得一提的事情。我猜.grepl可以完成这项工作,但是我不知道“匹配”运算符的工作方式。
因此,我从这个有效的代码开始。
summersmonth<- Df[DateVariable %like% "19610101" I DateVariable %like% "19610201"]
Run Code Online (Sandbox Code Playgroud)
我期待这样的代码
summermonths <- Df[DateVariable %like% "**06**" I DateVariable%like% "**07**..]
Run Code Online (Sandbox Code Playgroud)
这样,所有月份数字从06到09的条目都将保存在新的数据框summermonths中。
在此先感谢您对我的问题的任何答复或反馈。
更新资料
感谢您的回答,我得到了第一部分,这是将变量转换为as.date格式为“ month”(Class = char)的a现在,我需要选择Juni到September的月份。一个可怕的方式来获得我想要的结果是做一些subset和rbind之后。
Sommer1<-subset(Df, MonthVar == "Mai")
Sommer2<-subset(Df, MonthVar == "Juli")
Sommer3<-subset(Df, MonthVar == "September")
SummerTotal<-rbind(Sommer1,Sommer2,Sommer3)
Run Code Online (Sandbox Code Playgroud)
我很高兴看到这篇文章写得整整齐齐。
更新2-解决方案
这是整齐的方法,例如在子集函数和逻辑运算符中使用多个条件
Veg_Seas<-subset(Df, subset = MonthVar %in% c("Mai","Juni","Juli","August","September"))
Run Code Online (Sandbox Code Playgroud) 在data.frame dat中,变量下有两组名称Name:bob一个jim。但是,其中一些名称可能在它们之前(例如:)" jim"或之后(例如:)具有一些空格"bob "。
我想知道我怎么会split()这样data.frame通过Name而忽略这种可能的空间?
更新:除了忽略之外,能否在输出中完全删除空格split()?
dat <- data.frame(Name = c("bob", "bob ", " jim", "jim", "jim "), X = 1:5)
split(dat, trimws(dat$Name)) ## Split but spaces still show in the output:
## OUTPUT (notice spaces still show in the output):
$`bob`
Name X
1 bob 1
2 bob 2
$jim
Name X
3 jim 3
4 jim 4
5 …Run Code Online (Sandbox Code Playgroud) subset ×10
r ×9
dataframe ×7
as.date ×1
assign ×1
conditional ×1
filtering ×1
function ×1
if-statement ×1
list ×1
pandas ×1
python ×1
random ×1
regex ×1
row ×1
similarity ×1
time ×1
time-series ×1